add various usefull plugins from vim.org and sourfeforge
This commit is contained in:
parent
eb40e8aa1a
commit
90acee7e47
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,436 @@
|
|||
# voom_mode_asciidoc.py
|
||||
# Last Modified: 2012-04-02
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for AsciiDoc document and section titles.
|
||||
See |voom_mode_asciidoc|, ../../doc/voom.txt#*voom_mode_asciidoc*
|
||||
"""
|
||||
|
||||
### NOTES
|
||||
#
|
||||
# When outline operation changes level, it has to deal with two ambiguities:
|
||||
# a) Level 1-5 headline can use 2-style (underline) or 1-style (=).
|
||||
# b) 1-style can have or not have closing ='s.
|
||||
# To determine current preferences: check first headline at level <6 and check
|
||||
# first headline with =. This must be done in hook_makeOutline().
|
||||
# (Save in VO, similar to reST mode.) Cannot be done during outline operation,
|
||||
# that is in hook_doBodyAfterOop().
|
||||
# Defaults: use underline, use closing ='s.
|
||||
|
||||
try:
|
||||
import vim
|
||||
if vim.eval('exists("g:voom_asciidoc_do_blanks")')=='1' and vim.eval("g:voom_asciidoc_do_blanks")=='0':
|
||||
DO_BLANKS = False
|
||||
else:
|
||||
DO_BLANKS = True
|
||||
except ImportError:
|
||||
DO_BLANKS = True
|
||||
|
||||
import re
|
||||
# regex for 1-style headline, assumes there is no trailing whitespace
|
||||
HEAD_MATCH = re.compile(r'^(=+)(\s+\S.*?)(\s+\1)?$').match
|
||||
|
||||
# underline chars
|
||||
ADS_LEVELS = {'=':1, '-':2, '~':3, '^':4, '+':5}
|
||||
LEVELS_ADS = {1:'=', 2:'-', 3:'~', 4:'^', 5:'+'}
|
||||
|
||||
# DelimitedBlock chars, headines are ignored inside such blocks
|
||||
BLOCK_CHARS = {'/':0, '+':0, '-':0, '.':0, '*':0, '_':0, '=':0}
|
||||
|
||||
# Combine all signficant chars. Need one of these at start of line for a
|
||||
# headline or DelimitedBlock to occur.
|
||||
CHARS = {}
|
||||
for k in ADS_LEVELS:
|
||||
CHARS[k] = 0
|
||||
for k in BLOCK_CHARS:
|
||||
CHARS[k] = 0
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
ENC = VO.enc
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
|
||||
# trailing whitespace is always removed with rstrip()
|
||||
# if headline is precedeed by [AAA] and/or [[AAA]], bnode is set to their lnum
|
||||
#
|
||||
# 1-style, overides 2-style
|
||||
# [[AAA]] L3, blines[i-2]
|
||||
# [yyy] L2, blines[i-1]
|
||||
# == head == L1, blines[i] -- current line, closing = are optional
|
||||
#
|
||||
# 2-style (underline)
|
||||
# [[AAA]] L4, blines[i-3]
|
||||
# [yyy] L3, blines[i-2]
|
||||
# head L2, blines[i-1] -- title line, many restrictions on the format
|
||||
# ---- L1, blines[i] -- current line
|
||||
|
||||
|
||||
# Set this the first time a headline with level 1-5 is encountered.
|
||||
# 0 or 1 -- False, use 2-style (default); 2 -- True, use 1-style
|
||||
useOne = 0
|
||||
# Set this the first time headline in 1-style is encountered.
|
||||
# 0 or 1 -- True, use closing ='s (default); 2 -- False, do not use closing ='s
|
||||
useOneClose = 0
|
||||
|
||||
gotHead = False
|
||||
inBlock = False # True if inside DelimitedBlock, the value is the char
|
||||
headI = -2 # idx of the last line that is part of a headline
|
||||
blockI = -2 # idx of the last line where a DelimitedBlock ended
|
||||
m = None # match object for 1-style regex
|
||||
|
||||
for i in xrange(Z):
|
||||
L1 = blines[i].rstrip()
|
||||
if not L1 or not L1[0] in CHARS:
|
||||
continue
|
||||
ch = L1[0]
|
||||
|
||||
if inBlock:
|
||||
if inBlock==ch and len(L1)>3 and L1.lstrip(ch)=='':
|
||||
inBlock = False
|
||||
blockI = i
|
||||
continue
|
||||
|
||||
# 1-style headline
|
||||
if ch == '=' and L1.strip('='):
|
||||
m = HEAD_MATCH(L1)
|
||||
if m:
|
||||
gotHead = True
|
||||
headI_ = headI
|
||||
headI = i
|
||||
lev = len(m.group(1))
|
||||
head = m.group(2).strip()
|
||||
bnode = i+1
|
||||
|
||||
# current line is an underline
|
||||
# the previous, underlined line (L2) is not a headline if it:
|
||||
# is not exactly the length of underline +/- 2
|
||||
# is already part of in the previous headline
|
||||
# looks like an underline or a delimited block line
|
||||
# is [[AAA]] or [AAA] (BlockID or Attribute List)
|
||||
# starts with . (Block Title, they have no level)
|
||||
# starts with // (comment line)
|
||||
# starts with tab (don't know why, spaces are ok)
|
||||
# is only 1 chars (avoids confusion with --, as in Vim syntax, not as in AsciiDoc)
|
||||
if not gotHead and ch in ADS_LEVELS and L1.lstrip(ch)=='' and i > 0:
|
||||
L2 = blines[i-1].rstrip()
|
||||
z2 = len(L2.decode(ENC,'replace'))
|
||||
z1 = len(L1)
|
||||
if (L2 and
|
||||
(-3 < z2 - z1 < 3) and z1 > 1 and z2 > 1 and
|
||||
headI != i-1 and
|
||||
not ((L2[0] in CHARS) and L2.lstrip(L2[0])=='') and
|
||||
not (L2.startswith('[') and L2.endswith(']')) and
|
||||
not L2.startswith('.') and
|
||||
not L2.startswith('\t') and
|
||||
not (L2.startswith('//') and not L2.startswith('///'))
|
||||
):
|
||||
gotHead = True
|
||||
headI_ = headI
|
||||
headI = i
|
||||
lev = ADS_LEVELS[ch]
|
||||
head = L2.strip()
|
||||
bnode = i # lnum of previous line (L2)
|
||||
|
||||
if gotHead and bnode > 1:
|
||||
# decrement bnode if preceding lines are [[AAA]] or [AAA] lines
|
||||
# that is set bnode to the topmost [[AAA]] or [AAA] line number
|
||||
j_ = bnode-2 # idx of line before the title line
|
||||
L3 = blines[bnode-2].rstrip()
|
||||
while L3.startswith('[') and L3.endswith(']'):
|
||||
bnode -= 1
|
||||
if bnode > 1:
|
||||
L3 = blines[bnode-2].rstrip()
|
||||
else:
|
||||
break
|
||||
|
||||
# headline must be preceded by a blank line unless:
|
||||
# it's line 1 (j == -1)
|
||||
# headline is preceded by [AAA] or [[AAA]] lines (j != j_)
|
||||
# previous line is a headline (headI_ == j)
|
||||
# previous line is the end of a DelimitedBlock (blockI == j)
|
||||
j = bnode-2
|
||||
if DO_BLANKS and j==j_ and j > -1:
|
||||
L3 = blines[j].rstrip()
|
||||
if L3 and headI_ != j and blockI != j:
|
||||
# skip over any adjacent comment lines
|
||||
while L3.startswith('//') and not L3.startswith('///'):
|
||||
j -= 1
|
||||
if j > -1:
|
||||
L3 = blines[j].rstrip()
|
||||
else:
|
||||
L3 = ''
|
||||
if L3 and headI_ != j and blockI != j:
|
||||
gotHead = False
|
||||
headI = headI_
|
||||
|
||||
# start of DelimitedBlock
|
||||
if not gotHead and ch in BLOCK_CHARS and len(L1)>3 and L1.lstrip(ch)=='':
|
||||
inBlock = ch
|
||||
continue
|
||||
|
||||
if gotHead:
|
||||
gotHead = False
|
||||
# save style info for first headline and first 1-style headline
|
||||
if not useOne and lev < 6:
|
||||
if m:
|
||||
useOne = 2
|
||||
else:
|
||||
useOne = 1
|
||||
if not useOneClose and m:
|
||||
if m.group(3):
|
||||
useOneClose = 1
|
||||
else:
|
||||
useOneClose = 2
|
||||
# make outline
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(bnode)
|
||||
levels_add(lev)
|
||||
|
||||
# don't clobber these when parsing clipboard during Paste
|
||||
# which is the only time blines is not Body
|
||||
if blines is VO.Body:
|
||||
VO.useOne = useOne == 2
|
||||
VO.useOneClose = useOneClose < 2
|
||||
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
if level < 6 and not VO.useOne:
|
||||
bodyLines = [tree_head, LEVELS_ADS[level]*11, '']
|
||||
else:
|
||||
lev = '='*level
|
||||
if VO.useOneClose:
|
||||
bodyLines = ['%s %s %s' %(lev, tree_head, lev), '']
|
||||
else:
|
||||
bodyLines = ['%s %s' %(lev, tree_head), '']
|
||||
|
||||
# Add blank line when inserting after non-blank Body line.
|
||||
if VO.Body[blnum-1].strip():
|
||||
bodyLines[0:0] = ['']
|
||||
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
#def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
# DO NOT CREATE THIS HOOK
|
||||
|
||||
|
||||
def hook_doBodyAfterOop(VO, oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, blnumCut, tlnumCut):
|
||||
# this is instead of hook_changeLevBodyHead()
|
||||
|
||||
# Based on Markdown mode function.
|
||||
# Inserts blank separator lines if missing.
|
||||
|
||||
#print oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, tlnumCut, blnumCut
|
||||
Body = VO.Body
|
||||
Z = len(Body)
|
||||
bnodes, levels = VO.bnodes, VO.levels
|
||||
ENC = VO.enc
|
||||
|
||||
# blnum1 blnum2 is first and last lnums of Body region pasted, inserted
|
||||
# during up/down, or promoted/demoted.
|
||||
if blnum1:
|
||||
assert blnum1 == bnodes[tlnum1-1]
|
||||
if tlnum2 < len(bnodes):
|
||||
assert blnum2 == bnodes[tlnum2]-1
|
||||
else:
|
||||
assert blnum2 == Z
|
||||
|
||||
# blnumCut is Body lnum after which a region was removed during 'cut',
|
||||
# 'up', 'down'. Need this to check if there is blank line between nodes
|
||||
# used to be separated by the cut/moved region.
|
||||
if blnumCut:
|
||||
if tlnumCut < len(bnodes):
|
||||
assert blnumCut == bnodes[tlnumCut]-1
|
||||
else:
|
||||
assert blnumCut == Z
|
||||
|
||||
# Total number of added lines minus number of deleted lines.
|
||||
b_delta = 0
|
||||
|
||||
### After 'cut' or 'up': insert blank line if there is none
|
||||
# between the nodes used to be separated by the cut/moved region.
|
||||
if DO_BLANKS and (oop=='cut' or oop=='up') and (0 < blnumCut < Z) and Body[blnumCut-1].strip():
|
||||
Body[blnumCut:blnumCut] = ['']
|
||||
update_bnodes(VO, tlnumCut+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
if oop=='cut':
|
||||
return
|
||||
|
||||
### Make sure there is blank line after the last node in the region:
|
||||
# insert blank line after blnum2 if blnum2 is not blank, that is insert
|
||||
# blank line before bnode at tlnum2+1.
|
||||
if DO_BLANKS and blnum2 < Z and Body[blnum2-1].strip():
|
||||
Body[blnum2:blnum2] = ['']
|
||||
update_bnodes(VO, tlnum2+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
### Change levels and/or formats of headlines in the affected region.
|
||||
# Always do this after Paste, even if level is unchanged -- format can
|
||||
# be different when pasting from other outlines.
|
||||
# Examine each headline, from bottom to top, and change level and/or format.
|
||||
# To change from 1-style to 2-style:
|
||||
# strip ='s, strip whitespace;
|
||||
# insert underline.
|
||||
# To change from 2-style to 1-style:
|
||||
# delete underline;
|
||||
# insert ='s.
|
||||
# Update bnodes after inserting or deleting a line.
|
||||
#
|
||||
# NOTE: bnode can be [[AAA]] or [AAA] line, we check for that and adjust it
|
||||
# to point to the headline text line
|
||||
#
|
||||
# 1-style 2-style
|
||||
#
|
||||
# L0 L0 Body[bln-2]
|
||||
# == head L1 head L1 <--bnode Body[bln-1] (not always the actual bnode)
|
||||
# L2 ---- L2 Body[bln]
|
||||
# L3 L3 Body[bln+1]
|
||||
|
||||
if levDelta or oop=='paste':
|
||||
for i in xrange(tlnum2, tlnum1-1, -1):
|
||||
# required level (VO.levels has been updated)
|
||||
lev = levels[i-1]
|
||||
# current level from which to change to lev
|
||||
lev_ = lev - levDelta
|
||||
|
||||
# Body headline (bnode) and the next line
|
||||
bln = bnodes[i-1]
|
||||
L1 = Body[bln-1].rstrip()
|
||||
# bnode can point to the tompost [AAA] or [[AAA]] line
|
||||
# increment bln until the actual headline (title line) is found
|
||||
while L1.startswith('[') and L1.endswith(']'):
|
||||
bln += 1
|
||||
L1 = Body[bln-1].rstrip()
|
||||
# the underline line
|
||||
if bln+1 < len(Body):
|
||||
L2 = Body[bln].rstrip()
|
||||
else:
|
||||
L2 = ''
|
||||
|
||||
# get current headline format
|
||||
hasOne, hasOneClose = False, VO.useOneClose
|
||||
theHead = L1
|
||||
if L1.startswith('='):
|
||||
m = HEAD_MATCH(L1)
|
||||
if m:
|
||||
hasOne = True
|
||||
# headline without ='s but with whitespace around it preserved
|
||||
theHead = m.group(2)
|
||||
theclose = m.group(3)
|
||||
if theclose:
|
||||
hasOneClose = True
|
||||
theHead += theclose.rstrip('=')
|
||||
else:
|
||||
hasOneClose = False
|
||||
|
||||
# get desired headline format
|
||||
if oop=='paste':
|
||||
if lev > 5:
|
||||
useOne = True
|
||||
else:
|
||||
useOne = VO.useOne
|
||||
useOneClose = VO.useOneClose
|
||||
elif lev < 6 and lev_ < 6:
|
||||
useOne = hasOne
|
||||
useOneClose = hasOneClose
|
||||
elif lev > 5 and lev_ > 5:
|
||||
useOne = True
|
||||
useOneClose = hasOneClose
|
||||
elif lev < 6 and lev_ > 5:
|
||||
useOne = VO.useOne
|
||||
useOneClose = VO.useOneClose
|
||||
elif lev > 5 and lev_ < 6:
|
||||
useOne = True
|
||||
useOneClose = hasOneClose
|
||||
else:
|
||||
assert False
|
||||
#print useOne, hasOne, ';', useOneClose, hasOneClose
|
||||
|
||||
### change headline level and/or format
|
||||
# 2-style unchanged, only adjust level of underline
|
||||
if not useOne and not hasOne:
|
||||
if not levDelta: continue
|
||||
Body[bln] = LEVELS_ADS[lev]*len(L2)
|
||||
# 1-style unchanged, adjust level of ='s and add/remove closing ='s
|
||||
elif useOne and hasOne:
|
||||
# no format change, there are closing ='s
|
||||
if useOneClose and hasOneClose:
|
||||
if not levDelta: continue
|
||||
Body[bln-1] = '%s%s%s' %('='*lev, theHead, '='*lev)
|
||||
# no format change, there are no closing ='s
|
||||
elif not useOneClose and not hasOneClose:
|
||||
if not levDelta: continue
|
||||
Body[bln-1] = '%s%s' %('='*lev, theHead)
|
||||
# add closing ='s
|
||||
elif useOneClose and not hasOneClose:
|
||||
Body[bln-1] = '%s%s %s' %('='*lev, theHead.rstrip(), '='*lev)
|
||||
# remove closing ='s
|
||||
elif not useOneClose and hasOneClose:
|
||||
Body[bln-1] = '%s%s' %('='*lev, theHead.rstrip())
|
||||
# insert underline, remove ='s
|
||||
elif not useOne and hasOne:
|
||||
L1 = theHead.strip()
|
||||
Body[bln-1] = L1
|
||||
# insert underline
|
||||
Body[bln:bln] = [LEVELS_ADS[lev]*len(L1.decode(ENC,'replace'))]
|
||||
update_bnodes(VO, i+1, 1)
|
||||
b_delta+=1
|
||||
# remove underline, insert ='s
|
||||
elif useOne and not hasOne:
|
||||
if useOneClose:
|
||||
Body[bln-1] = '%s %s %s' %('='*lev, theHead.strip(), '='*lev)
|
||||
else:
|
||||
Body[bln-1] = '%s %s' %('='*lev, theHead.strip())
|
||||
# delete underline
|
||||
Body[bln:bln+1] = []
|
||||
update_bnodes(VO, i+1, -1)
|
||||
b_delta-=1
|
||||
|
||||
### Make sure first headline is preceded by a blank line.
|
||||
blnum1 = bnodes[tlnum1-1]
|
||||
if DO_BLANKS and blnum1 > 1 and Body[blnum1-2].strip():
|
||||
Body[blnum1-1:blnum1-1] = ['']
|
||||
update_bnodes(VO, tlnum1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
### After 'down' : insert blank line if there is none
|
||||
# between the nodes used to be separated by the moved region.
|
||||
if DO_BLANKS and oop=='down' and (0 < blnumCut < Z) and Body[blnumCut-1].strip():
|
||||
Body[blnumCut:blnumCut] = ['']
|
||||
update_bnodes(VO, tlnumCut+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
assert len(Body) == Z + b_delta
|
||||
|
||||
|
||||
def update_bnodes(VO, tlnum, delta):
|
||||
"""Update VO.bnodes by adding/substracting delta to each bnode
|
||||
starting with bnode at tlnum and to the end.
|
||||
"""
|
||||
bnodes = VO.bnodes
|
||||
for i in xrange(tlnum, len(bnodes)+1):
|
||||
bnodes[i-1] += delta
|
||||
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
# voom_mode_cwiki.py
|
||||
# Last Modified: 2011-10-30
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for cwiki Vim plugin. Contributed by Craig B. Allen.
|
||||
http://www.vim.org/scripts/script.php?script_id=2176
|
||||
See |voom_mode_various|, ../../doc/voom.txt#*voom_mode_various*
|
||||
|
||||
+++ headline level 1
|
||||
some text
|
||||
++++ headline level 2
|
||||
more text
|
||||
+++++ headline level 3
|
||||
++++++ headline level 4
|
||||
etc.
|
||||
|
||||
First + must be at start of line. Whitespace after the last + is optional.
|
||||
"""
|
||||
|
||||
import re
|
||||
headline_match = re.compile(r'^\+\+(\++)').match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
if not blines[i].startswith('+'):
|
||||
continue
|
||||
bline = blines[i]
|
||||
m = headline_match(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
head = bline[2+lev:].strip()
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['++%s %s' %('+'*level, tree_head), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
m = headline_match(h)
|
||||
level = len(m.group(1))
|
||||
return '++%s%s' %('+'*(level+levDelta), h[m.end(1):])
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# voom_mode_fmr1.py
|
||||
# Last Modified: 2012-02-25
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
This mode changes absolutely nothing, it is identical to the default mode.
|
||||
See |voom_mode_fmr|, ../../doc/voom.txt#*voom_mode_fmr*
|
||||
"""
|
||||
|
||||
# Define this mode as an 'fmr' mode.
|
||||
MODE_FMR = True
|
|
@ -0,0 +1,63 @@
|
|||
# voom_mode_fmr1.py
|
||||
# Last Modified: 2012-02-25
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for start fold markers with levels.
|
||||
Similar to the default mode, that is the :Voom command.
|
||||
See |voom_mode_fmr|, ../../doc/voom.txt#*voom_mode_fmr*
|
||||
|
||||
headline level 1 {{{1
|
||||
some text
|
||||
headline level 2 {{{2
|
||||
more text
|
||||
"""
|
||||
|
||||
# Define this mode as an 'fmr' mode.
|
||||
MODE_FMR = True
|
||||
|
||||
# voom.makeoutline() without char stripping
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
marker = VO.marker
|
||||
marker_re_search = VO.marker_re.search
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
#c = VO.rstrip_chars
|
||||
for i in xrange(Z):
|
||||
if not marker in blines[i]: continue
|
||||
bline = blines[i]
|
||||
m = marker_re_search(bline)
|
||||
if not m: continue
|
||||
lev = int(m.group(1))
|
||||
#head = bline[:m.start()].lstrip().rstrip(c).strip('-=~').strip()
|
||||
head = bline[:m.start()].strip()
|
||||
tline = ' %s%s|%s' %(m.group(2) or ' ', '. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
# same as voom.newHeadline() but without ---
|
||||
def hook_newHeadline(VO, level, blnum, ln):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
#bodyLines = ['---%s--- %s%s' %(tree_head, VO.marker, level), '']
|
||||
bodyLines = ['%s %s%s' %(tree_head, VO.marker, level), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
# voom_mode_fmr2.py
|
||||
# Last Modified: 2012-02-04
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode. Headline text is after the start fold marker with level.
|
||||
See |voom_mode_fmr|, ../../doc/voom.txt#*voom_mode_fmr*
|
||||
|
||||
{{{1 headline level 1
|
||||
some text
|
||||
{{{2 headline level 2
|
||||
more text
|
||||
"""
|
||||
|
||||
# Define this mode as an 'fmr' mode.
|
||||
MODE_FMR = True
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
marker = VO.marker
|
||||
marker_re_search = VO.marker_re.search
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
#c = VO.rstrip_chars
|
||||
for i in xrange(Z):
|
||||
if not marker in blines[i]: continue
|
||||
bline = blines[i]
|
||||
m = marker_re_search(bline)
|
||||
if not m: continue
|
||||
lev = int(m.group(1))
|
||||
#head = bline[:m.start()].lstrip().rstrip(c).strip('-=~').strip()
|
||||
head = bline[m.end():]
|
||||
# strip special marks o=
|
||||
if head and head[0]=='o': head = head[1:]
|
||||
if head and head[0]=='=': head = head[1:]
|
||||
tline = ' %s%s|%s' %(m.group(2) or ' ', '. '*(lev-1), head.strip())
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, ln):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s%s %s' %(VO.marker, level, tree_head), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# voom_mode_hashes.py
|
||||
# Last Modified: 2012-05-06
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for headlines marked with #'s (atx-headers, a subset of Markdown format).
|
||||
See |voom_mode_hashes|, ../../doc/voom.txt#*voom_mode_hashes*
|
||||
|
||||
# heading level 1
|
||||
##heading level 2
|
||||
### heading level 3
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
# Marker character can be changed to any ASCII character.
|
||||
CH = '#'
|
||||
|
||||
# Use this if whitespace after marker chars is optional.
|
||||
headline_match = re.compile(r'^(%s+)' %re.escape(CH)).match
|
||||
# Use this if a whitespace is required after marker chars (as in org-mode).
|
||||
#headline_match = re.compile(r'^(%s+)\s' %re.escape(CH)).match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
if not blines[i].startswith(CH):
|
||||
continue
|
||||
bline = blines[i]
|
||||
m = headline_match(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
head = bline[lev:].strip()
|
||||
# Do this instead if optional closing markers need to be stripped.
|
||||
#head = bline[lev:].strip().rstrip(CH).rstrip()
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s %s' %(CH * level, tree_head), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
m = headline_match(h)
|
||||
level = len(m.group(1))
|
||||
return '%s%s' %(CH * (level+levDelta), h[m.end(1):])
|
||||
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
# voom_mode_html.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for HTML headings.
|
||||
See |voom_mode_html|, ../../doc/voom.txt#*voom_mode_html*
|
||||
|
||||
<h1>headline level 1</h1>
|
||||
some text
|
||||
<h2> headline level 2 </h2>
|
||||
more text
|
||||
<H3 ALIGN="CENTER"> headline level 3 </H3>
|
||||
< h4 > headline level 4 </H4 >
|
||||
some text <h4> <font color=red> headline 5 </font> </H4> </td></div>
|
||||
etc.
|
||||
"""
|
||||
|
||||
import re
|
||||
headline_search = re.compile(r'<\s*h(\d+).*?>(.*?)</h(\1)\s*>', re.IGNORECASE).search
|
||||
html_tag_sub = re.compile('<.*?>').sub
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
bline = blines[i]
|
||||
if not ('</h' in bline or '</H' in bline):
|
||||
continue
|
||||
m = headline_search(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = int(m.group(1))
|
||||
head = m.group(2)
|
||||
# delete all html tags
|
||||
head = html_tag_sub('',head)
|
||||
tline = ' %s|%s' %('. '*(lev-1), head.strip())
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['<h%s>%s</h%s>' %(level, tree_head, level), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
m = headline_search(h)
|
||||
level = int(m.group(1))
|
||||
lev = level+levDelta
|
||||
return '%s%s%s%s%s' %(h[:m.start(1)], lev, h[m.end(1):m.start(3)], lev, h[m.end(3):])
|
||||
|
|
@ -0,0 +1,318 @@
|
|||
# voom_mode_markdown.py
|
||||
# Last Modified: 2012-04-02
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for Markdown headers.
|
||||
See |voom_mode_markdown|, ../../doc/voom.txt#*voom_mode_markdown*
|
||||
"""
|
||||
|
||||
### NOTES
|
||||
# When outline operation changes level, it has to deal with two ambiguities:
|
||||
# a) Level 1 and 2 headline can use underline-style or hashes-style.
|
||||
# b) Hashes-style can have or not have closing hashes.
|
||||
# To determine current preferences: check first headline at level <3 and check
|
||||
# first headline with hashes. This must be done in hook_makeOutline().
|
||||
# (Save in VO, similar to reST mode.) Cannot be done during outline operation,
|
||||
# that is in hook_doBodyAfterOop().
|
||||
# Defaults: use underline, use closing hashes.
|
||||
|
||||
|
||||
levels_ads = {1:'=', 2:'-'}
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
|
||||
# trailing whitespace is always removed with rstrip()
|
||||
#
|
||||
# hashes-style, overides underline-style
|
||||
# abcde L2, blines[i-1]
|
||||
# ## head L1, blines[i] -- current line
|
||||
#
|
||||
# underline-style
|
||||
# head L2, blines[i-1] -- title line, not blank, does not start with #
|
||||
# ------ L1, blines[i] -- current line, any number of = or - only
|
||||
|
||||
L1, L2 = '',''
|
||||
|
||||
# Set this once when headline with level 1 or 2 is encountered.
|
||||
# 0 or 1 -- False, use underline-style (default); 2 -- True, use hashes-style
|
||||
useHash = 0
|
||||
# Set this once when headline with hashes is encountered.
|
||||
# 0 or 1 -- True, use closing hashes (default); 2 -- False, do not use closing hashes
|
||||
useCloseHash = 0
|
||||
|
||||
gotHead = False
|
||||
for i in xrange(Z):
|
||||
L2 = L1
|
||||
L1 = blines[i].rstrip()
|
||||
|
||||
if L1.startswith('#'):
|
||||
gotHead = True
|
||||
lev = len(L1) - len(L1.lstrip('#'))
|
||||
bnode = i+1
|
||||
head = L1.strip('#').strip()
|
||||
elif L2 and L1.startswith('=') and L1.lstrip('=')=='':
|
||||
gotHead = True
|
||||
lev = 1
|
||||
head = L2.strip()
|
||||
bnode = i
|
||||
elif L2 and L1.startswith('-') and L1.lstrip('-')=='':
|
||||
gotHead = True
|
||||
lev = 2
|
||||
head = L2.strip()
|
||||
bnode = i
|
||||
else:
|
||||
continue
|
||||
|
||||
if gotHead:
|
||||
gotHead = False
|
||||
if not useHash and lev < 3:
|
||||
if L1.startswith('#'):
|
||||
useHash = 2
|
||||
else:
|
||||
useHash = 1
|
||||
if not useCloseHash and L1.startswith('#'):
|
||||
if L1.endswith('#'):
|
||||
useCloseHash = 1
|
||||
else:
|
||||
useCloseHash = 2
|
||||
L1, L2 = '',''
|
||||
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(bnode)
|
||||
levels_add(lev)
|
||||
|
||||
# don't clobber these when parsing clipboard during Paste
|
||||
# which is the only time blines is not Body
|
||||
if blines is VO.Body:
|
||||
VO.useHash = useHash == 2
|
||||
VO.useCloseHash = useCloseHash < 2
|
||||
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
if level < 3 and not VO.useHash:
|
||||
bodyLines = [tree_head, levels_ads[level]*11, '']
|
||||
else:
|
||||
lev = '#'*level
|
||||
if VO.useCloseHash:
|
||||
bodyLines = ['%s %s %s' %(lev, tree_head, lev), '']
|
||||
else:
|
||||
bodyLines = ['%s %s' %(lev, tree_head), '']
|
||||
|
||||
# Add blank line when inserting after non-blank Body line.
|
||||
if VO.Body[blnum-1].strip():
|
||||
bodyLines[0:0] = ['']
|
||||
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
#def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
# DO NOT CREATE THIS HOOK
|
||||
|
||||
|
||||
def hook_doBodyAfterOop(VO, oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, blnumCut, tlnumCut):
|
||||
# this is instead of hook_changeLevBodyHead()
|
||||
|
||||
# Based on reST mode function. Insert blank separator lines if missing,
|
||||
# even though they are not important for Markdown headlines.
|
||||
|
||||
#print oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, tlnumCut, blnumCut
|
||||
Body = VO.Body
|
||||
Z = len(Body)
|
||||
bnodes, levels = VO.bnodes, VO.levels
|
||||
ENC = VO.enc
|
||||
|
||||
# blnum1 blnum2 is first and last lnums of Body region pasted, inserted
|
||||
# during up/down, or promoted/demoted.
|
||||
if blnum1:
|
||||
assert blnum1 == bnodes[tlnum1-1]
|
||||
if tlnum2 < len(bnodes):
|
||||
assert blnum2 == bnodes[tlnum2]-1
|
||||
else:
|
||||
assert blnum2 == Z
|
||||
|
||||
# blnumCut is Body lnum after which a region was removed during 'cut',
|
||||
# 'up', 'down'. Need this to check if there is blank line between nodes
|
||||
# used to be separated by the cut/moved region.
|
||||
if blnumCut:
|
||||
if tlnumCut < len(bnodes):
|
||||
assert blnumCut == bnodes[tlnumCut]-1
|
||||
else:
|
||||
assert blnumCut == Z
|
||||
|
||||
# Total number of added lines minus number of deleted lines.
|
||||
b_delta = 0
|
||||
|
||||
### After 'cut' or 'up': insert blank line if there is none
|
||||
# between the nodes used to be separated by the cut/moved region.
|
||||
if (oop=='cut' or oop=='up') and (0 < blnumCut < Z) and Body[blnumCut-1].strip():
|
||||
Body[blnumCut:blnumCut] = ['']
|
||||
update_bnodes(VO, tlnumCut+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
if oop=='cut':
|
||||
return
|
||||
|
||||
### Make sure there is blank line after the last node in the region:
|
||||
# insert blank line after blnum2 if blnum2 is not blank, that is insert
|
||||
# blank line before bnode at tlnum2+1.
|
||||
if blnum2 < Z and Body[blnum2-1].strip():
|
||||
Body[blnum2:blnum2] = ['']
|
||||
update_bnodes(VO, tlnum2+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
### Change levels and/or formats of headlines in the affected region.
|
||||
# Always do this after Paste, even if level is unchanged -- format can
|
||||
# be different when pasting from other outlines.
|
||||
# Examine each headline, from bottom to top, and change level and/or format.
|
||||
# To change from hashes to underline-style:
|
||||
# strip hashes, strip whitespace;
|
||||
# insert underline.
|
||||
# To change from underline to hashes-style:
|
||||
# delete underline;
|
||||
# insert hashes.
|
||||
# Update bnodes after inserting or deleting a line.
|
||||
|
||||
# hash-style underline-style
|
||||
#
|
||||
# L0 L0 Body[bln-2]
|
||||
# ## head L1 head L1 <--bnode Body[bln-1]
|
||||
# L2 ---- L2 Body[bln]
|
||||
# L3 L3 Body[bln+1]
|
||||
|
||||
if levDelta or oop=='paste':
|
||||
for i in xrange(tlnum2, tlnum1-1, -1):
|
||||
# required level (VO.levels has been updated)
|
||||
lev = levels[i-1]
|
||||
# current level from which to change to lev
|
||||
lev_ = lev - levDelta
|
||||
|
||||
# Body headline (bnode) and next line
|
||||
bln = bnodes[i-1]
|
||||
L1 = Body[bln-1].rstrip()
|
||||
if bln+1 < len(Body):
|
||||
L2 = Body[bln].rstrip()
|
||||
else:
|
||||
L2 = ''
|
||||
|
||||
# get current headline format
|
||||
hasHash, hasCloseHash = False, VO.useCloseHash
|
||||
if L1.startswith('#'):
|
||||
hasHash = True
|
||||
if L1.endswith('#'):
|
||||
hasCloseHash = True
|
||||
else:
|
||||
hasCloseHash = False
|
||||
|
||||
# get desired headline format
|
||||
if oop=='paste':
|
||||
if lev > 2:
|
||||
useHash = True
|
||||
else:
|
||||
useHash = VO.useHash
|
||||
useCloseHash = VO.useCloseHash
|
||||
elif lev < 3 and lev_ < 3:
|
||||
useHash = hasHash
|
||||
useCloseHash = hasCloseHash
|
||||
elif lev > 2 and lev_ > 2:
|
||||
useHash = True
|
||||
useCloseHash = hasCloseHash
|
||||
elif lev < 3 and lev_ > 2:
|
||||
useHash = VO.useHash
|
||||
useCloseHash = VO.useCloseHash
|
||||
elif lev > 2 and lev_ < 3:
|
||||
useHash = True
|
||||
useCloseHash = hasCloseHash
|
||||
else:
|
||||
assert False
|
||||
#print useHash, hasHash, ';', useCloseHash, hasCloseHash
|
||||
|
||||
# change headline level and/or format
|
||||
|
||||
# underline-style unchanged, only adjust level of underline
|
||||
if not useHash and not hasHash:
|
||||
if not levDelta: continue
|
||||
Body[bln] = levels_ads[lev]*len(L2)
|
||||
# hashes-style unchanged, adjust level of hashes and add/remove closing hashes
|
||||
elif useHash and hasHash:
|
||||
# no format change, there are closing hashes
|
||||
if useCloseHash and hasCloseHash:
|
||||
if not levDelta: continue
|
||||
Body[bln-1] = '%s%s%s' %('#'*lev, L1.strip('#'), '#'*lev)
|
||||
# no format change, there are no closing hashes
|
||||
elif not useCloseHash and not hasCloseHash:
|
||||
if not levDelta: continue
|
||||
Body[bln-1] = '%s%s' %('#'*lev, L1.lstrip('#'))
|
||||
# add closing hashes
|
||||
elif useCloseHash and not hasCloseHash:
|
||||
Body[bln-1] = '%s%s %s' %('#'*lev, L1.strip('#').rstrip(), '#'*lev)
|
||||
# remove closing hashes
|
||||
elif not useCloseHash and hasCloseHash:
|
||||
Body[bln-1] = '%s%s' %('#'*lev, L1.strip('#').rstrip())
|
||||
# insert underline, remove hashes
|
||||
elif not useHash and hasHash:
|
||||
L1 = L1.strip('#').strip()
|
||||
Body[bln-1] = L1
|
||||
# insert underline
|
||||
Body[bln:bln] = [levels_ads[lev]*len(L1.decode(ENC,'replace'))]
|
||||
update_bnodes(VO, i+1, 1)
|
||||
b_delta+=1
|
||||
# remove underline, insert hashes
|
||||
elif useHash and not hasHash:
|
||||
if useCloseHash:
|
||||
Body[bln-1] = '%s %s %s' %('#'*lev, L1.strip('#').strip(), '#'*lev)
|
||||
else:
|
||||
Body[bln-1] = '%s %s' %('#'*lev, L1.strip('#').strip())
|
||||
# delete underline
|
||||
Body[bln:bln+1] = []
|
||||
update_bnodes(VO, i+1, -1)
|
||||
b_delta-=1
|
||||
|
||||
### Make sure first headline is preceded by a blank line.
|
||||
blnum1 = bnodes[tlnum1-1]
|
||||
if blnum1 > 1 and Body[blnum1-2].strip():
|
||||
Body[blnum1-1:blnum1-1] = ['']
|
||||
update_bnodes(VO, tlnum1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
### After 'down' : insert blank line if there is none
|
||||
# between the nodes used to be separated by the moved region.
|
||||
if oop=='down' and (0 < blnumCut < Z) and Body[blnumCut-1].strip():
|
||||
Body[blnumCut:blnumCut] = ['']
|
||||
update_bnodes(VO, tlnumCut+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
assert len(Body) == Z + b_delta
|
||||
|
||||
|
||||
def update_bnodes(VO, tlnum, delta):
|
||||
"""Update VO.bnodes by adding/substracting delta to each bnode
|
||||
starting with bnode at tlnum and to the end.
|
||||
"""
|
||||
bnodes = VO.bnodes
|
||||
for i in xrange(tlnum, len(bnodes)+1):
|
||||
bnodes[i-1] += delta
|
||||
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
# voom_mode_org.py
|
||||
# Last Modified: 2011-10-28
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for Emacs Org-mode headline format.
|
||||
See |voom_mode_org|, ../../doc/voom.txt#*voom_mode_org*
|
||||
"""
|
||||
|
||||
import re
|
||||
headline_match = re.compile(r'^(\*+)\s').match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
if not blines[i].startswith('*'):
|
||||
continue
|
||||
bline = blines[i]
|
||||
m = headline_match(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
head = bline[lev:].strip()
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s %s' %('*'*level, tree_head), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
m = headline_match(h)
|
||||
level = len(m.group(1))
|
||||
return '%s%s' %('*'*(level+levDelta), h[m.end(1):])
|
||||
|
||||
|
|
@ -0,0 +1,214 @@
|
|||
# voom_mode_python.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for Python code.
|
||||
See |voom_mode_python|, ../../doc/voom.txt#*voom_mode_python*
|
||||
"""
|
||||
|
||||
import token, tokenize
|
||||
import traceback
|
||||
import vim
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
|
||||
#ignore_lnums, func_lnums = get_lnums_from_tokenize(blines)
|
||||
try:
|
||||
ignore_lnums, func_lnums = get_lnums_from_tokenize(blines)
|
||||
except (IndentationError, tokenize.TokenError):
|
||||
vim.command("call Voom_ErrorMsg('VOoM: EXCEPTION WHILE PARSING PYTHON OUTLINE')")
|
||||
# DO NOT print to sys.stderr -- triggers Vim error when default stderr (no PyLog)
|
||||
#traceback.print_exc() --this goes to sys.stderr
|
||||
#print traceback.format_exc() --ok but no highlighting
|
||||
lines = traceback.format_exc().replace("'","''").split('\n')
|
||||
for l in lines:
|
||||
vim.command("call Voom_ErrorMsg('%s')" %l)
|
||||
return (['= |!!!ERROR: OUTLINE IS INVALID'], [1], [1])
|
||||
|
||||
gotHead = False # True if current line is a headline
|
||||
indents = [0,] # indents of previous levels
|
||||
funcLevels = [] # levels of previous def or class
|
||||
indent_error = '' # inconsistent indent
|
||||
for i in xrange(Z):
|
||||
if i+1 in ignore_lnums: continue
|
||||
bline = blines[i]
|
||||
bline_s = bline.strip()
|
||||
if not bline_s: continue
|
||||
bline_ls = bline.lstrip()
|
||||
|
||||
# compute indent and level
|
||||
indent = len(bline) - len(bline_ls)
|
||||
if indent > indents[-1]:
|
||||
indents.append(indent)
|
||||
elif indent < indents[-1]:
|
||||
while indents and (indents[-1] > indent):
|
||||
indents.pop()
|
||||
if indents[-1]==indent:
|
||||
indent_error = ''
|
||||
else:
|
||||
indent_error = '!!! '
|
||||
lev = len(indents)
|
||||
|
||||
# first line after the end of a class or def block
|
||||
if funcLevels and lev <= funcLevels[-1]:
|
||||
gotHead = True
|
||||
while funcLevels and funcLevels[-1] >= lev:
|
||||
funcLevels.pop()
|
||||
# first line of a class or def block
|
||||
if i+1 in func_lnums:
|
||||
gotHead = True
|
||||
if not funcLevels or (lev > funcLevels[-1]):
|
||||
funcLevels.append(lev)
|
||||
# special comment line (unconditional headline) or line with @decorator
|
||||
elif bline_s.startswith('@') or bline_s.startswith('### ') or bline_s.startswith('#---'):
|
||||
gotHead = True
|
||||
|
||||
if gotHead:
|
||||
gotHead = False
|
||||
tline = ' %s|%s%s' %('. '*(lev-1), indent_error, bline_s)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
class BLines:
|
||||
"""Wrapper around Vim buffer object or list of Body lines to provide
|
||||
readline() method for use with tokenize.generate_tokens().
|
||||
"""
|
||||
def __init__(self, blines):
|
||||
self.blines = blines
|
||||
self.size = len(blines)
|
||||
self.idx = -1
|
||||
|
||||
def readline(self):
|
||||
self.idx += 1
|
||||
if self.idx == self.size:
|
||||
return ''
|
||||
return "%s\n" %self.blines[self.idx]
|
||||
|
||||
|
||||
### toktypes of tokens
|
||||
STRING = token.STRING
|
||||
NAME = token.NAME
|
||||
NEWLINE = token.NEWLINE
|
||||
|
||||
def get_lnums_from_tokenize(blines):
|
||||
"""Return dicts. Keys are Body lnums.
|
||||
The main purpose is to get list of lnums to ignore: multi-line strings and
|
||||
expressions.
|
||||
"""
|
||||
# lnums to ignore: multi-line strings and expressions other than the first line
|
||||
ignore_lnums = {}
|
||||
# lnums of 'class' and 'def' tokens
|
||||
func_lnums = {}
|
||||
|
||||
inName = False
|
||||
|
||||
for tok in tokenize.generate_tokens(BLines(blines).readline):
|
||||
toktype, toktext, (srow, scol), (erow, ecol), line = tok
|
||||
#print token.tok_name[toktype], tok
|
||||
if toktype == NAME:
|
||||
if not inName:
|
||||
inName = True
|
||||
srow_name = srow
|
||||
if toktext in ('def','class'):
|
||||
func_lnums[srow] = toktext
|
||||
elif toktype == NEWLINE and inName:
|
||||
inName = False
|
||||
if srow_name != erow:
|
||||
for i in xrange(srow_name+1, erow+1):
|
||||
ignore_lnums[i] = 0
|
||||
elif toktype == STRING:
|
||||
if srow != erow:
|
||||
for i in xrange(srow+1, erow+1):
|
||||
ignore_lnums[i] = 0
|
||||
|
||||
return (ignore_lnums, func_lnums)
|
||||
|
||||
|
||||
def get_body_indent(body):
|
||||
"""Return string used for indenting Body lines."""
|
||||
et = int(vim.eval("getbufvar(%s,'&et')" %body))
|
||||
if et:
|
||||
ts = int(vim.eval("getbufvar(%s,'&ts')" %body))
|
||||
return ' '*ts
|
||||
else:
|
||||
return '\t'
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = '### NewHeadline'
|
||||
indent = get_body_indent(VO.body)
|
||||
body_head = '%s%s' %(indent*(level-1), tree_head)
|
||||
return (tree_head, [body_head])
|
||||
|
||||
|
||||
#def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
#"""Increase of decrease level number of Body headline by levDelta."""
|
||||
#if levDelta==0: return h
|
||||
|
||||
|
||||
def hook_doBodyAfterOop(VO, oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, blnumCut, tlnumCut):
|
||||
# this is instead of hook_changeLevBodyHead()
|
||||
#print oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, tlnumCut, blnumCut
|
||||
Body = VO.Body
|
||||
Z = len(Body)
|
||||
|
||||
ind = get_body_indent(VO.body)
|
||||
# levDelta is wrong when pasting because hook_makeOutline() looks at relative indent
|
||||
# determine level of pasted region from indent of its first line
|
||||
if oop=='paste':
|
||||
bline1 = Body[blnum1-1]
|
||||
lev = (len(bline1) - len(bline1.lstrip())) / len(ind) + 1
|
||||
levDelta = VO.levels[tlnum1-1] - lev
|
||||
|
||||
if not levDelta: return
|
||||
|
||||
indent = abs(levDelta) * ind
|
||||
#--- copied from voom_mode_thevimoutliner.py -----------------------------
|
||||
if blnum1:
|
||||
assert blnum1 == VO.bnodes[tlnum1-1]
|
||||
if tlnum2 < len(VO.bnodes):
|
||||
assert blnum2 == VO.bnodes[tlnum2]-1
|
||||
else:
|
||||
assert blnum2 == Z
|
||||
|
||||
# dedent (if possible) or indent every non-blank line in Body region blnum1,blnum2
|
||||
blines = []
|
||||
for i in xrange(blnum1-1,blnum2):
|
||||
line = Body[i]
|
||||
if not line.strip():
|
||||
blines.append(line)
|
||||
continue
|
||||
if levDelta > 0:
|
||||
line = '%s%s' %(indent,line)
|
||||
elif levDelta < 0 and line.startswith(indent):
|
||||
line = line[len(indent):]
|
||||
blines.append(line)
|
||||
|
||||
# replace Body region
|
||||
Body[blnum1-1:blnum2] = blines
|
||||
assert len(Body)==Z
|
||||
|
||||
|
|
@ -0,0 +1,369 @@
|
|||
# voom_mode_rest.py
|
||||
# Last Modified: 2012-04-02
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for reStructuredText.
|
||||
See |voom_mode_rest|, ../../doc/voom.txt#*voom_mode_rest*
|
||||
|
||||
http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#sections
|
||||
The following are all valid section title adornment characters:
|
||||
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
|
||||
|
||||
Some characters are more suitable than others. The following are recommended:
|
||||
= - ` : . ' " ~ ^ _ * + #
|
||||
|
||||
http://docs.python.org/documenting/rest.html#sections
|
||||
Python recommended styles: ## ** = - ^ "
|
||||
"""
|
||||
|
||||
# All valid section title adornment characters.
|
||||
AD_CHARS = """ ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ """
|
||||
AD_CHARS = AD_CHARS.split()
|
||||
|
||||
# List of adornment styles, in order of preference.
|
||||
# Adornment style (ad) is a char or double char: '=', '==', '-', '--', '*', etc.
|
||||
# Char is adornment char, double if there is overline.
|
||||
AD_STYLES = """ == -- = - * " ' ` ~ : ^ + # . _ """
|
||||
AD_STYLES = AD_STYLES.split()
|
||||
|
||||
# add all other possible styles to AD_STYLES
|
||||
d = {}.fromkeys(AD_STYLES)
|
||||
for c in AD_CHARS:
|
||||
if not c*2 in d:
|
||||
AD_STYLES.append(c*2)
|
||||
if not c in d:
|
||||
AD_STYLES.append(c)
|
||||
assert len(AD_STYLES)==64
|
||||
|
||||
# convert AD_CHARS to dict for faster lookups
|
||||
AD_CHARS = {}.fromkeys(AD_CHARS)
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
ENC = VO.enc
|
||||
|
||||
# {adornment style: level, ...}
|
||||
# Level indicates when the first instance of this style was found.
|
||||
ads_levels = {}
|
||||
|
||||
# diagram of Body lines when a headline is detected
|
||||
# trailing whitespace always removed with rstrip()
|
||||
# a b c
|
||||
# ------ L3, blines[i-2] -- an overline or blank line
|
||||
# head L2, blines[i-1] -- title line, not blank, <= than underline, can be inset only if overline
|
||||
# ------ L1, blines[i] -- current line, always underline
|
||||
# x y z
|
||||
L1, L2, L3 = '','',''
|
||||
|
||||
gotHead = False
|
||||
for i in xrange(Z):
|
||||
L2, L3 = L1, L2
|
||||
L1 = blines[i].rstrip()
|
||||
# current line must be underline and title line cannot be blank
|
||||
if not (L1 and L2 and (L1[0] in AD_CHARS) and L1.lstrip(L1[0])==''):
|
||||
continue
|
||||
# underline must be as long as headline text
|
||||
if len(L1) < len(L2.decode(ENC,'replace')):
|
||||
continue
|
||||
# there is no overline; L3 must be blank line; L2 must be not inset
|
||||
if not L3 and len(L2)==len(L2.lstrip()):
|
||||
#if len(L1) < len(L2.decode(ENC,'replace')): continue
|
||||
gotHead = True
|
||||
ad = L1[0]
|
||||
head = L2.strip()
|
||||
bnode = i
|
||||
# there is overline -- bnode is lnum of overline!
|
||||
elif L3==L1:
|
||||
#if len(L1) < len(L2.decode(ENC,'replace')): continue
|
||||
gotHead = True
|
||||
ad = L1[0]*2
|
||||
head = L2.strip()
|
||||
bnode = i-1
|
||||
|
||||
if gotHead:
|
||||
if not ad in ads_levels:
|
||||
ads_levels[ad] = len(ads_levels)+1
|
||||
lev = ads_levels[ad]
|
||||
gotHead = False
|
||||
L1, L2, L3 = '','',''
|
||||
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(bnode)
|
||||
levels_add(lev)
|
||||
|
||||
# save ads_levels for outline operations
|
||||
# don't clobber VO.ads_levels when parsing clipboard during Paste
|
||||
# which is the only time blines is not Body
|
||||
if blines is VO.Body:
|
||||
VO.ads_levels = ads_levels
|
||||
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
ads_levels = VO.ads_levels
|
||||
levels_ads = dict([[v,k] for k,v in ads_levels.items()])
|
||||
|
||||
if level in levels_ads:
|
||||
ad = levels_ads[level]
|
||||
else:
|
||||
ad = get_new_ad(levels_ads, ads_levels, level)
|
||||
|
||||
if len(ad)==1:
|
||||
bodyLines = [tree_head, ad*11, '']
|
||||
elif len(ad)==2:
|
||||
ad = ad[0]
|
||||
bodyLines = [ad*11, tree_head, ad*11, '']
|
||||
|
||||
# Add blank line when inserting after non-blank Body line.
|
||||
if VO.Body[blnum-1].strip():
|
||||
bodyLines[0:0] = ['']
|
||||
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
#def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
# DO NOT CREATE THIS HOOK
|
||||
|
||||
|
||||
def hook_doBodyAfterOop(VO, oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, blnumCut, tlnumCut):
|
||||
# this is instead of hook_changeLevBodyHead()
|
||||
#print oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, tlnumCut, blnumCut
|
||||
Body = VO.Body
|
||||
Z = len(Body)
|
||||
bnodes, levels = VO.bnodes, VO.levels
|
||||
ENC = VO.enc
|
||||
|
||||
# blnum1 blnum2 is first and last lnums of Body region pasted, inserted
|
||||
# during up/down, or promoted/demoted.
|
||||
if blnum1:
|
||||
assert blnum1 == bnodes[tlnum1-1]
|
||||
if tlnum2 < len(bnodes):
|
||||
assert blnum2 == bnodes[tlnum2]-1
|
||||
else:
|
||||
assert blnum2 == Z
|
||||
|
||||
# blnumCut is Body lnum after which a region was removed during 'cut',
|
||||
# 'up', 'down'. We need to check if there is blank line between nodes
|
||||
# used to be separated by the cut/moved region to prevent headline loss.
|
||||
if blnumCut:
|
||||
if tlnumCut < len(bnodes):
|
||||
assert blnumCut == bnodes[tlnumCut]-1
|
||||
else:
|
||||
assert blnumCut == Z
|
||||
|
||||
# Total number of added lines minus number of deleted lines.
|
||||
b_delta = 0
|
||||
|
||||
### After 'cut' or 'up': insert blank line if there is none
|
||||
# between the nodes used to be separated by the cut/moved region.
|
||||
if (oop=='cut' or oop=='up') and (0 < blnumCut < Z) and Body[blnumCut-1].strip():
|
||||
Body[blnumCut:blnumCut] = ['']
|
||||
update_bnodes(VO, tlnumCut+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
if oop=='cut':
|
||||
return
|
||||
|
||||
### Prevent loss of headline after last node in the region:
|
||||
# insert blank line after blnum2 if blnum2 is not blank, that is insert
|
||||
# blank line before bnode at tlnum2+1.
|
||||
if blnum2 < Z and Body[blnum2-1].strip():
|
||||
Body[blnum2:blnum2] = ['']
|
||||
update_bnodes(VO, tlnum2+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
### Change levels and/or styles of headlines in the affected region.
|
||||
# Always do this after Paste, even if level is unchanged -- adornments can
|
||||
# be different when pasting from other outlines.
|
||||
# Examine each headline, from bottom to top, and change adornment style.
|
||||
# To change from underline to overline style:
|
||||
# insert overline.
|
||||
# To change from overline to underline style:
|
||||
# delete overline if there is blank before it;
|
||||
# otherwise change overline to blank line;
|
||||
# remove inset from headline text.
|
||||
# Update bnodes after inserting or deleting a line.
|
||||
if levDelta or oop=='paste':
|
||||
ads_levels = VO.ads_levels
|
||||
levels_ads = dict([[v,k] for k,v in ads_levels.items()])
|
||||
# Add adornment styles for new levels. Can't do this in the main loop
|
||||
# because it goes backwards and thus will add styles in reverse order.
|
||||
for i in xrange(tlnum1, tlnum2+1):
|
||||
lev = levels[i-1]
|
||||
if not lev in levels_ads:
|
||||
ad = get_new_ad(levels_ads, ads_levels, lev)
|
||||
levels_ads[lev] = ad
|
||||
ads_levels[ad] = lev
|
||||
for i in xrange(tlnum2, tlnum1-1, -1):
|
||||
# required level (VO.levels has been updated)
|
||||
lev = levels[i-1]
|
||||
# required adornment style
|
||||
ad = levels_ads[lev]
|
||||
|
||||
# deduce current adornment style
|
||||
bln = bnodes[i-1]
|
||||
L1 = Body[bln-1].rstrip()
|
||||
L2 = Body[bln].rstrip()
|
||||
if bln+1 < len(Body):
|
||||
L3 = Body[bln+1].rstrip()
|
||||
else:
|
||||
L3 = ''
|
||||
ad_ = deduce_ad_style(L1,L2,L3,ENC)
|
||||
|
||||
# change adornment style
|
||||
# see deduce_ad_style() for diagram
|
||||
if ad_==ad:
|
||||
continue
|
||||
elif len(ad_)==1 and len(ad)==1:
|
||||
Body[bln] = ad*len(L2)
|
||||
elif len(ad_)==2 and len(ad)==2:
|
||||
Body[bln-1] = ad[0]*len(L1)
|
||||
Body[bln+1] = ad[0]*len(L3)
|
||||
elif len(ad_)==1 and len(ad)==2:
|
||||
# change underline if different
|
||||
if not ad_ == ad[0]:
|
||||
Body[bln] = ad[0]*len(L2)
|
||||
# insert overline; current bnode doesn't change
|
||||
Body[bln-1:bln-1] = [ad[0]*len(L2)]
|
||||
update_bnodes(VO, i+1, 1)
|
||||
b_delta+=1
|
||||
elif len(ad_)==2 and len(ad)==1:
|
||||
# change underline if different
|
||||
if not ad_[0] == ad:
|
||||
Body[bln+1] = ad*len(L3)
|
||||
# remove headline inset if any
|
||||
if not len(L2) == len(L2.lstrip()):
|
||||
Body[bln] = L2.lstrip()
|
||||
# check if line before overline is blank
|
||||
if bln >1:
|
||||
L0 = Body[bln-2].rstrip()
|
||||
else:
|
||||
L0 = ''
|
||||
# there is blank before overline
|
||||
# delete overline; current bnode doesn't change
|
||||
if not L0:
|
||||
Body[bln-1:bln] = []
|
||||
update_bnodes(VO, i+1, -1)
|
||||
b_delta-=1
|
||||
# there is no blank before overline
|
||||
# change overline to blank; only current bnode needs updating
|
||||
else:
|
||||
Body[bln-1] = ''
|
||||
bnodes[i-1]+=1
|
||||
|
||||
### Prevent loss of first headline: make sure it is preceded by a blank line
|
||||
blnum1 = bnodes[tlnum1-1]
|
||||
if blnum1 > 1 and Body[blnum1-2].strip():
|
||||
Body[blnum1-1:blnum1-1] = ['']
|
||||
update_bnodes(VO, tlnum1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
### After 'down' : insert blank line if there is none
|
||||
# between the nodes used to be separated by the moved region.
|
||||
if oop=='down' and (0 < blnumCut < Z) and Body[blnumCut-1].strip():
|
||||
Body[blnumCut:blnumCut] = ['']
|
||||
update_bnodes(VO, tlnumCut+1 ,1)
|
||||
b_delta+=1
|
||||
|
||||
assert len(Body) == Z + b_delta
|
||||
|
||||
|
||||
def update_bnodes(VO, tlnum, delta):
|
||||
"""Update VO.bnodes by adding/substracting delta to each bnode
|
||||
starting with bnode at tlnum and to the end.
|
||||
"""
|
||||
bnodes = VO.bnodes
|
||||
for i in xrange(tlnum, len(bnodes)+1):
|
||||
bnodes[i-1] += delta
|
||||
|
||||
|
||||
def get_new_ad(levels_ads, ads_levels, level):
|
||||
"""Return adornment style for new level, that is level missing from
|
||||
levels_ads and ads_levels.
|
||||
"""
|
||||
for ad in AD_STYLES:
|
||||
if not ad in ads_levels:
|
||||
return ad
|
||||
# all 64 adornment styles are in use, return style for level 64
|
||||
assert len(levels_ads)==64
|
||||
return levels_ads[64]
|
||||
|
||||
|
||||
def deduce_ad_style(L1,L2,L3,ENC):
|
||||
"""Deduce adornment style given first 3 lines of Body node.
|
||||
1st line is bnode line. Lines must be rstripped.
|
||||
"""
|
||||
# '--' style '-' style
|
||||
#
|
||||
# L0 L0 Body[bln-2]
|
||||
# ---- L1 head L1 <--bnode Body[bln-1]
|
||||
# head L2 ---- L2 Body[bln]
|
||||
# ---- L3 text L3 Body[bln+1]
|
||||
|
||||
# bnode is overline
|
||||
if L1==L3 and (L1[0] in AD_CHARS) and L1.lstrip(L1[0])=='' and (len(L1) >= len(L2.decode(ENC,'replace'))):
|
||||
ad = 2*L1[0]
|
||||
# bnode is headline text
|
||||
elif (L2[0] in AD_CHARS) and L2.lstrip(L2[0])=='' and (len(L2) >= len(L1.decode(ENC,'replace'))):
|
||||
ad = L2[0]
|
||||
else:
|
||||
print L1
|
||||
print L2
|
||||
print L3
|
||||
print ENC
|
||||
assert None
|
||||
|
||||
return ad
|
||||
|
||||
# wrong if perverse headline like this (correct ad style is '-')
|
||||
#
|
||||
# ^^^^^
|
||||
# -----
|
||||
# ^^^^^
|
||||
# text
|
||||
|
||||
|
||||
def deduce_ad_style_test(VO):
|
||||
""" Test to verify deduce_ad_style(). Execute from Vim
|
||||
:py voom.VOOMS[1].mModule.deduce_ad_style_test(voom.VOOMS[1])
|
||||
"""
|
||||
bnodes, levels, Body = VO.bnodes, VO.levels, VO.Body
|
||||
ads_levels = VO.ads_levels
|
||||
levels_ads = dict([[v,k] for k,v in ads_levels.items()])
|
||||
ENC = VO.enc
|
||||
|
||||
for i in xrange(2, len(bnodes)+1):
|
||||
bln = bnodes[i-1]
|
||||
L1 = Body[bln-1].rstrip()
|
||||
L2 = Body[bln].rstrip()
|
||||
if bln+1 < len(Body):
|
||||
L3 = Body[bln+1].rstrip()
|
||||
else:
|
||||
L3 = ''
|
||||
ad = deduce_ad_style(L1,L2,L3,ENC)
|
||||
lev = levels[i-1]
|
||||
print i, ad, levels_ads[lev]
|
||||
assert ad == levels_ads[lev]
|
||||
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
# voom_mode_thevimoutliner.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for The Vim Outliner format.
|
||||
See |voom_mode_thevimoutliner|, ../../doc/voom.txt#*voom_mode_thevimoutliner*
|
||||
|
||||
Headlines and body lines are indented with Tabs. Number of tabs indicates
|
||||
level. 0 Tabs means level 1.
|
||||
|
||||
Headlines are lines with >=0 Tabs followed by any character except '|'.
|
||||
|
||||
Blank lines are not headlines.
|
||||
"""
|
||||
|
||||
# Body lines start with these chars
|
||||
BODY_CHARS = {'|':0,}
|
||||
|
||||
# ------ the rest is identical to voom_mode_vimoutliner.py -------------------
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
bline = blines[i].rstrip()
|
||||
if not bline:
|
||||
continue
|
||||
head = bline.lstrip('\t')
|
||||
if head[0] in BODY_CHARS:
|
||||
continue
|
||||
lev = len(bline) - len(head) + 1
|
||||
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s%s' %('\t'*(level-1), tree_head),]
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
#def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
#"""Increase of decrease level number of Body headline by levDelta."""
|
||||
#if levDelta==0: return h
|
||||
|
||||
def hook_doBodyAfterOop(VO, oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, blnumCut, tlnumCut):
|
||||
# this is instead of hook_changeLevBodyHead()
|
||||
if not levDelta: return
|
||||
|
||||
indent = abs(levDelta) * '\t'
|
||||
|
||||
Body = VO.Body
|
||||
Z = len(Body)
|
||||
|
||||
# ---- identical to voom_mode_python.py code ----------------------------
|
||||
if blnum1:
|
||||
assert blnum1 == VO.bnodes[tlnum1-1]
|
||||
if tlnum2 < len(VO.bnodes):
|
||||
assert blnum2 == VO.bnodes[tlnum2]-1
|
||||
else:
|
||||
assert blnum2 == Z
|
||||
|
||||
# dedent (if possible) or indent every non-blank line in Body region blnum1,blnum2
|
||||
blines = []
|
||||
for i in xrange(blnum1-1,blnum2):
|
||||
line = Body[i]
|
||||
if not line.strip():
|
||||
blines.append(line)
|
||||
continue
|
||||
if levDelta > 0:
|
||||
line = '%s%s' %(indent,line)
|
||||
elif levDelta < 0 and line.startswith(indent):
|
||||
line = line[len(indent):]
|
||||
blines.append(line)
|
||||
|
||||
# replace Body region
|
||||
Body[blnum1-1:blnum2] = blines
|
||||
assert len(Body)==Z
|
|
@ -0,0 +1,105 @@
|
|||
# voom_mode_txt2tags.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for txt2tags titles.
|
||||
See |voom_mode_txt2tags|, ../../doc/voom.txt#*voom_mode_txt2tags*
|
||||
"""
|
||||
|
||||
import re
|
||||
# from txt2tags.py
|
||||
# titskel = r'^ *(?P<id>%s)(?P<txt>%s)\1(\[(?P<label>[\w-]*)\])?\s*$'
|
||||
# bank[ 'title'] = re.compile(titskel%('[=]{1,5}','[^=](|.*[^=])'))
|
||||
# bank['numtitle'] = re.compile(titskel%('[+]{1,5}','[^+](|.*[^+])'))
|
||||
# === headline ===
|
||||
headline1_match = re.compile(r'^ *(=+)([^=].*[^=]|[^=])(\1)(\[[\w-]*\])?\s*$').match
|
||||
# +++ headline +++
|
||||
headline2_match = re.compile(r'^ *(\++)([^+].*[^+]|[^+])(\1)(\[[\w-]*\])?\s*$').match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
|
||||
areaVerb,areaRaw,areaTagged = False,False,False
|
||||
for i in xrange(Z):
|
||||
bline = blines[i]
|
||||
|
||||
# ignore Verbatim/Raw/Tagged Areas
|
||||
bline_rs = bline.rstrip()
|
||||
if bline_rs=='```' and not (areaRaw or areaTagged):
|
||||
areaVerb = not areaVerb; continue
|
||||
elif bline_rs=='"""' and not (areaVerb or areaTagged):
|
||||
areaRaw = not areaRaw; continue
|
||||
elif bline_rs=="'''" and not (areaVerb or areaRaw):
|
||||
areaTagged = not areaTagged; continue
|
||||
if areaVerb or areaRaw or areaTagged: continue
|
||||
|
||||
# there can be leading spaces but not tabs
|
||||
bline = bline.lstrip(' ')
|
||||
if bline.startswith('='):
|
||||
m = headline1_match(bline)
|
||||
if not m: continue
|
||||
plus = ''
|
||||
elif bline.startswith('+'):
|
||||
m = headline2_match(bline)
|
||||
if not m: continue
|
||||
plus = '+ '
|
||||
else:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
head = '%s%s' %(plus, m.group(2).strip())
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
# choose = or + headline type -- same as previous headline
|
||||
if tlnum > 1:
|
||||
prev_head = VO.Body[VO.bnodes[tlnum-1] - 1]
|
||||
if prev_head.lstrip()[0] == '=':
|
||||
lev = '='*level
|
||||
else:
|
||||
lev = '+'*level
|
||||
tree_head = '+ NewHeadline'
|
||||
else:
|
||||
lev = '='*level
|
||||
bodyLines = ['%s NewHeadline %s' %(lev, lev), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
hLS = h.lstrip()
|
||||
if hLS[0] == '=':
|
||||
m = headline1_match(h)
|
||||
level = len(m.group(1))
|
||||
s = '='*(level+levDelta)
|
||||
elif hLS[0] == '+':
|
||||
m = headline2_match(h)
|
||||
level = len(m.group(1))
|
||||
s = '+'*(level+levDelta)
|
||||
else: assert False
|
||||
return '%s%s%s%s%s' %(h[:m.start(1)], s, h[m.end(1):m.start(3)], s, h[m.end(3):])
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
# voom_mode_viki.py
|
||||
# Last Modified: 2011-10-28
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for headline markup used by Vim Viki/Deplate plugin.
|
||||
See |voom_mode_viki|, ../../doc/voom.txt#*voom_mode_viki*
|
||||
"""
|
||||
|
||||
import re
|
||||
headline_match = re.compile(r'^(\*+)\s').match
|
||||
|
||||
# Ignore Regions other than #Region
|
||||
#
|
||||
# #Type [OPTIONS] <<EndOfRegion
|
||||
# .......
|
||||
# EndOfRegion
|
||||
#
|
||||
# syntax/viki.vim:
|
||||
# syn region vikiRegion matchgroup=vikiMacroDelim
|
||||
# \ start=/^[[:blank:]]*#\([A-Z]\([a-z][A-Za-z]*\)\?\>\|!!!\)\(\\\n\|.\)\{-}<<\z(.*\)$/
|
||||
# \ end=/^[[:blank:]]*\z1[[:blank:]]*$/
|
||||
# \ contains=@vikiText,vikiRegionNames
|
||||
#
|
||||
# EndOfRegion can be empty string, leading/trailing white space matters
|
||||
# Don't know what !!! is for.
|
||||
#
|
||||
region_match = re.compile(r'^\s*#([A-Z]([a-z][A-Za-z]*)?)\b.*?<<(.*)').match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
inRegion = False # EndOfRegion match object when inside a region
|
||||
for i in xrange(Z):
|
||||
bline = blines[i]
|
||||
|
||||
if inRegion:
|
||||
if re.match(inRegion, bline):
|
||||
inRegion = False
|
||||
continue
|
||||
|
||||
if bline.lstrip().startswith('#') and '<<' in bline:
|
||||
r_m = region_match(bline)
|
||||
if r_m and r_m.group(1) != 'Region':
|
||||
inRegion = '^\s*%s\s*$' %re.escape(r_m.group(3) or '')
|
||||
continue
|
||||
elif not bline.startswith('*'):
|
||||
continue
|
||||
|
||||
m = headline_match(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
head = bline[lev:].strip()
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s %s' %('*'*level, tree_head), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
m = headline_match(h)
|
||||
level = len(m.group(1))
|
||||
return '%s%s' %('*'*(level+levDelta), h[m.end(1):])
|
||||
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
# voom_mode_vimoutliner.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for VimOutliner format.
|
||||
See |voom_mode_vimoutliner|, ../../doc/voom.txt#*voom_mode_vimoutliner*
|
||||
|
||||
Headlines are lines with >=0 Tabs followed by any character except:
|
||||
: ; | > <
|
||||
Otherwise this mode is identical to the "thevimoutliner" mode.
|
||||
"""
|
||||
|
||||
# Body lines start with these chars
|
||||
BODY_CHARS = {':':0, ';':0, '|':0, '<':0, '>':0,}
|
||||
|
||||
|
||||
#-------------copy/pasted from voom_mode_thevimoutliner.py -------------------
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
bline = blines[i].rstrip()
|
||||
if not bline:
|
||||
continue
|
||||
head = bline.lstrip('\t')
|
||||
if head[0] in BODY_CHARS:
|
||||
continue
|
||||
lev = len(bline) - len(head) + 1
|
||||
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
column is cursor position in new headline in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s%s' %('\t'*(level-1), tree_head),]
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
#def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
#"""Increase of decrease level number of Body headline by levDelta."""
|
||||
#if levDelta==0: return h
|
||||
|
||||
def hook_doBodyAfterOop(VO, oop, levDelta, blnum1, tlnum1, blnum2, tlnum2, blnumCut, tlnumCut):
|
||||
# this is instead of hook_changeLevBodyHead()
|
||||
if not levDelta: return
|
||||
|
||||
indent = abs(levDelta) * '\t'
|
||||
|
||||
Body = VO.Body
|
||||
Z = len(Body)
|
||||
|
||||
# ---- identical to Python mode ----
|
||||
if blnum1:
|
||||
assert blnum1 == VO.bnodes[tlnum1-1]
|
||||
if tlnum2 < len(VO.bnodes):
|
||||
assert blnum2 == VO.bnodes[tlnum2]-1
|
||||
else:
|
||||
assert blnum2 == Z
|
||||
|
||||
# dedent (if possible) or indent every non-blank line in Body region blnum1,blnum2
|
||||
blines = []
|
||||
for i in xrange(blnum1-1,blnum2):
|
||||
line = Body[i]
|
||||
if not line.strip():
|
||||
blines.append(line)
|
||||
continue
|
||||
if levDelta > 0:
|
||||
line = '%s%s' %(indent,line)
|
||||
elif levDelta < 0 and line.startswith(indent):
|
||||
line = line[len(indent):]
|
||||
blines.append(line)
|
||||
|
||||
# replace Body region
|
||||
Body[blnum1-1:blnum2] = blines
|
||||
assert len(Body)==Z
|
|
@ -0,0 +1,70 @@
|
|||
# voom_mode_vimwiki.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for headline markup used by vimwiki plugin:
|
||||
http://www.vim.org/scripts/script.php?script_id=2226
|
||||
See |voom_mode_vimwiki|, ../../doc/voom.txt#*voom_mode_vimwiki*
|
||||
|
||||
= headline level 1 =
|
||||
body text
|
||||
== headline level 2 ==
|
||||
body text
|
||||
=== headline level 3 ===
|
||||
|
||||
"""
|
||||
|
||||
import re
|
||||
headline_match = re.compile(r'^\s*(=+).+(\1)\s*$').match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
bline = blines[i].strip()
|
||||
if not bline.startswith('='):
|
||||
continue
|
||||
m = headline_match(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
bline = bline.strip()
|
||||
head = bline[lev:-lev].strip()
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s %s %s' %('='*level, tree_head, '='*level), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
m = headline_match(h)
|
||||
level = len(m.group(1))
|
||||
s = '='*(level+levDelta)
|
||||
return '%s%s%s%s%s' %(h[:m.start(1)], s, h[m.end(1):m.start(2)], s, h[m.end(2):])
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
# voom_mode_wiki.py
|
||||
# Last Modified: 2011-05-01
|
||||
# VOoM -- Vim two-pane outliner, plugin for Python-enabled Vim version 7.x
|
||||
# Website: http://www.vim.org/scripts/script.php?script_id=2657
|
||||
# Author: Vlad Irnov (vlad DOT irnov AT gmail DOT com)
|
||||
# License: This program is free software. It comes without any warranty,
|
||||
# to the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want To
|
||||
# Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
"""
|
||||
VOoM markup mode for MediaWiki headline markup.
|
||||
See |voom_mode_wiki|, ../../doc/voom.txt#*voom_mode_wiki*
|
||||
|
||||
= headline level 1 =
|
||||
some text
|
||||
== headline level 2 ==
|
||||
more text
|
||||
=== headline level 3 === <!--comment-->
|
||||
==== headline level 4 ====<!--comment-->
|
||||
|
||||
"""
|
||||
|
||||
# can access main module voom.py, including global outline data
|
||||
#import sys
|
||||
#if 'voom' in sys.modules:
|
||||
#voom = sys.modules['voom']
|
||||
#VOOMS = voom.VOOMS
|
||||
|
||||
import re
|
||||
comment_tag_sub = re.compile('<!--.*?-->\s*$').sub
|
||||
headline_match = re.compile(r'^(=+).*(\1)\s*$').match
|
||||
|
||||
|
||||
def hook_makeOutline(VO, blines):
|
||||
"""Return (tlines, bnodes, levels) for Body lines blines.
|
||||
blines is either Vim buffer object (Body) or list of buffer lines.
|
||||
"""
|
||||
Z = len(blines)
|
||||
tlines, bnodes, levels = [], [], []
|
||||
tlines_add, bnodes_add, levels_add = tlines.append, bnodes.append, levels.append
|
||||
for i in xrange(Z):
|
||||
if not blines[i].startswith('='):
|
||||
continue
|
||||
bline = blines[i]
|
||||
if '<!--' in bline:
|
||||
bline = comment_tag_sub('',bline)
|
||||
bline = bline.strip()
|
||||
m = headline_match(bline)
|
||||
if not m:
|
||||
continue
|
||||
lev = len(m.group(1))
|
||||
head = bline[lev:-lev].strip()
|
||||
tline = ' %s|%s' %('. '*(lev-1), head)
|
||||
tlines_add(tline)
|
||||
bnodes_add(i+1)
|
||||
levels_add(lev)
|
||||
return (tlines, bnodes, levels)
|
||||
|
||||
|
||||
def hook_newHeadline(VO, level, blnum, tlnum):
|
||||
"""Return (tree_head, bodyLines).
|
||||
tree_head is new headline string in Tree buffer (text after |).
|
||||
bodyLines is list of lines to insert in Body buffer.
|
||||
"""
|
||||
tree_head = 'NewHeadline'
|
||||
bodyLines = ['%s %s %s' %('='*level, tree_head, '='*level), '']
|
||||
return (tree_head, bodyLines)
|
||||
|
||||
|
||||
def hook_changeLevBodyHead(VO, h, levDelta):
|
||||
"""Increase of decrease level number of Body headline by levDelta."""
|
||||
if levDelta==0: return h
|
||||
hs = h # need to strip trailing comment tags first
|
||||
if '<!--' in h:
|
||||
hs = comment_tag_sub('',hs)
|
||||
m = headline_match(hs)
|
||||
level = len(m.group(1))
|
||||
s = '='*(level+levDelta)
|
||||
return '%s%s%s%s' %(s, h[m.end(1):m.start(2)], s, h[m.end(2):])
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
" This VOoM add-on shows how to customize Tree headline text for individual
|
||||
" Body filetypes. It works only when outlining start fold markers with levels,
|
||||
" doesn't do anything when using a markup mode.
|
||||
"
|
||||
" IMPORTANT: This file must be sourced after entire voom.vim has been sourced.
|
||||
" Use option g:voom_user_command as explained in |voom_addons|.
|
||||
" EXAMPLE: Move this file to $HOME/.vim/voom_add-ons/ and add the following
|
||||
" line to .vimrc:
|
||||
" let g:voom_user_command = "runtime! voom_add-ons/*.vim"
|
||||
"
|
||||
" NOTE: DO NOT place this file in Vim plugin folder or its subfolder.
|
||||
"
|
||||
|
||||
" Do not load this script if voom.vim has not been sourced completely.
|
||||
if !exists('*Voom_Exec')
|
||||
finish
|
||||
endif
|
||||
|
||||
|
||||
" g:voom_rstrip_chars_{filetype} can be defined here instead of vimrc.
|
||||
" Note that Space and Tab must be included.
|
||||
if 0
|
||||
let g:voom_rstrip_chars_autohotkey = "; \t"
|
||||
endif
|
||||
|
||||
|
||||
python << EOF
|
||||
|
||||
# Replace default headline construction procedure with a custom function:
|
||||
# 1. Define a make_head Python function.
|
||||
# - It returns a string: Tree headline text.
|
||||
# - It requires two arguments: bline and match.
|
||||
# - bline is Body line from which we make Tree headline.
|
||||
# - match is MatchObject produced by re.search() for bline and fold
|
||||
# marker regex
|
||||
# - bline[:match.start()] gives part of Body line before the
|
||||
# matching fold marker. This is what we usually start from.
|
||||
# 2. Register function in dictionary voom.MAKE_HEAD for filetypes with which
|
||||
# it should be used.
|
||||
|
||||
import re
|
||||
|
||||
if 1:
|
||||
# HTML headline: like default plus delete all html tags
|
||||
html_tag_sub = re.compile('<.*?>').sub
|
||||
def voom_make_head_html(bline,match):
|
||||
s = bline[:match.start()].strip().strip('-=~').strip()
|
||||
s = html_tag_sub('',s)
|
||||
if s.endswith('<!'):
|
||||
return s[:-2].strip()
|
||||
else:
|
||||
return s
|
||||
voom.MAKE_HEAD['html'] = voom_make_head_html
|
||||
|
||||
if 0:
|
||||
# Python headline: like default plus remove "def "
|
||||
def voom_make_head_python(bline,match):
|
||||
s = bline[:match.start()].lstrip().rstrip('# \t').strip('-=~').strip()
|
||||
if s.startswith('def ') or s.startswith('def\t'):
|
||||
return s[3:].lstrip()
|
||||
else:
|
||||
return s
|
||||
voom.MAKE_HEAD['python'] = voom_make_head_python
|
||||
#voom.MAKE_HEAD['ruby'] = voom_make_head_python
|
||||
|
||||
if 0:
|
||||
# Vim headline: like default plus remove leading "fu ", "fun ", ..., "function ".
|
||||
vim_func_sub = re.compile(r"^fu(n|nc|nct|ncti|nctio|nction)?!?\s+").sub
|
||||
def voom_make_head_vim(bline,match):
|
||||
s = bline[:match.start()].lstrip().rstrip('" \t').strip('-=~').strip()
|
||||
s = vim_func_sub('',s)
|
||||
return s
|
||||
voom.MAKE_HEAD['vim'] = voom_make_head_vim
|
||||
|
||||
EOF
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
" This is a sample VOoM add-on.
|
||||
" It creates global command :VoomInfo which prints various outline information
|
||||
" about the current buffer if it's a VOoM buffer (Tree or Body)
|
||||
|
||||
" This file can be sourced at any time like a regular Vim script. E.g., it can
|
||||
" be dropped in folder ~/.vim/plugin/ . Of course, VOoM has to be installed for
|
||||
" the command :VoomInfo to work.
|
||||
" This works because the name of command function starts with 'Voom_'
|
||||
|
||||
|
||||
com! VoomInfo call Voom_Info()
|
||||
|
||||
func! Voom_Info()
|
||||
""""""" standard code for every VOoM add-on command
|
||||
" Determine if the current buffer is a VOoM Tree buffer, Body buffer, or neither.
|
||||
let [bufType,body,tree] = Voom_GetBufInfo()
|
||||
" Error, outline is not available (Body is unloaded, outline update failed).
|
||||
if body==-1 | return | endif
|
||||
""" Do different things depending on the type of the current buffer.
|
||||
" Current buffer is not a VOoM buffer (neither Tree nor Body).
|
||||
" The error message is printed automatically. It can be suppressed by
|
||||
" providing an optional argument: Voom_GetBufInfo(1)
|
||||
if bufType==#'None'
|
||||
"call Voom_ErrorMsg("VOoM: current buffer is not a VOoM buffer")
|
||||
return
|
||||
" Current buffer is a VOoM Body. Outline is updated automatically if needed.
|
||||
elseif bufType==#'Body'
|
||||
call Voom_WarningMsg("in VOoM Body buffer")
|
||||
" Current buffer is a VOoM Tree.
|
||||
elseif bufType==#'Tree'
|
||||
call Voom_WarningMsg("in VOoM Tree buffer")
|
||||
endif
|
||||
" Get Vim-side outline data. NOTE: Do not modify these dictionaries!
|
||||
let [voom_bodies, voom_trees] = Voom_GetData()
|
||||
|
||||
|
||||
""""""" script-specific code
|
||||
" Get Python-side data. This creates Vim local variables.
|
||||
py voom_Info()
|
||||
|
||||
echo 'VOoM version:' Voom_GetVar('s:voom_did_quickload')
|
||||
echo '__PyLog__ buffer number:' Voom_GetVar('s:voom_logbnr')
|
||||
" print outline information
|
||||
echo 'VOoM outline for:' getbufline(tree,1)[0][1:]
|
||||
echo 'Current buffer is:' bufType
|
||||
echo 'Body buffer number:' body
|
||||
echo 'Tree buffer number:' tree
|
||||
echo 'number of nodes:' l:nodesNumber
|
||||
echo 'nodes with/without children:' l:nodesWithChildren '/' l:nodesWithoutChildren
|
||||
echo 'max level:' l:maxLevel
|
||||
echo 'selected node number:' voom_bodies[body].snLn
|
||||
echo 'selected node headline text:' l:selectedHeadline
|
||||
echo 'selected node level:' l:selectedNodeLevel
|
||||
endfunc
|
||||
|
||||
python << EOF
|
||||
def voom_Info():
|
||||
body, tree = int(vim.eval('l:body')), int(vim.eval('l:tree'))
|
||||
VO = voom.VOOMS[body]
|
||||
bnodes, levels = VO.bnodes, VO.levels
|
||||
vim.command("let l:maxLevel=%s" %(max(levels)))
|
||||
vim.command("let l:nodesNumber=%s" %(len(bnodes)))
|
||||
nodesWithChildren = len([i for i in xrange(1,len(bnodes)+1) if voom.nodeHasChildren(VO,i)])
|
||||
vim.command("let l:nodesWithChildren=%s" %nodesWithChildren)
|
||||
nodesWithoutChildren = len([i for i in xrange(1,len(bnodes)+1) if not voom.nodeHasChildren(VO,i)])
|
||||
vim.command("let l:nodesWithoutChildren=%s" %nodesWithoutChildren)
|
||||
snLn = VO.snLn
|
||||
treeline = VO.Tree[snLn-1]
|
||||
if snLn>1:
|
||||
selectedHeadline = treeline[treeline.find('|')+1:]
|
||||
else:
|
||||
selectedHeadline = "top-of-buffer"
|
||||
vim.command("let [l:selectedNode,l:selectedHeadline]=[%s,'%s']" %(snLn, selectedHeadline.replace("'","''")))
|
||||
vim.command("let l:selectedNodeLevel=%s" %levels[snLn-1])
|
||||
EOF
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
vim:fdm=marker
|
||||
vim:foldtext=getline(v\:foldstart).'\ \ \ /'.v\:foldlevel.'...'.(v\:foldend-v\:foldstart)
|
||||
foldtext=getline(v\:foldstart).'...'.(v\:foldend-v\:foldstart)
|
||||
|
||||
Vim folding seems to be limited to 20 levels.
|
||||
|
||||
--- 1 ---{{{1
|
||||
1
|
||||
|
||||
--- 2 ---{{{2
|
||||
2
|
||||
|
||||
--- 3 ---{{{3
|
||||
3
|
||||
|
||||
--- 4 ---{{{4
|
||||
4
|
||||
|
||||
--- 5 ---{{{5
|
||||
5
|
||||
|
||||
--- 6 ---{{{6
|
||||
6
|
||||
|
||||
--- 7 ---{{{7
|
||||
7
|
||||
|
||||
--- 8 ---{{{8
|
||||
8
|
||||
|
||||
--- 9 ---{{{9
|
||||
9
|
||||
|
||||
--- 10 ---{{{10
|
||||
10
|
||||
|
||||
--- 11 ---{{{11
|
||||
11
|
||||
|
||||
--- 12 ---{{{12
|
||||
12
|
||||
|
||||
--- 13 ---{{{13
|
||||
13
|
||||
|
||||
--- 14 ---{{{14
|
||||
14
|
||||
|
||||
--- 15 ---{{{15
|
||||
15
|
||||
|
||||
--- 16 ---{{{16
|
||||
16
|
||||
|
||||
--- 17 ---{{{17
|
||||
17
|
||||
|
||||
--- 18 ---{{{18
|
||||
18
|
||||
|
||||
--- 19 ---{{{19
|
||||
19
|
||||
|
||||
--- 20 ---{{{20
|
||||
20
|
||||
|
||||
--- 21 ---{{{21
|
||||
21
|
||||
|
||||
--- 22 ---{{{22
|
||||
22
|
||||
|
||||
--- 23 ---{{{23
|
||||
23
|
||||
|
||||
--- 24 ---{{{24
|
||||
24
|
||||
|
||||
--- 25 ---{{{25
|
||||
25
|
||||
|
||||
--- 26 ---{{{26
|
||||
26
|
||||
|
||||
--- 27 ---{{{27
|
||||
27
|
||||
|
||||
--- 28 ---{{{28
|
||||
28
|
||||
|
||||
--- 29 ---{{{29
|
||||
29
|
||||
|
||||
--- 30 ---{{{30
|
||||
30
|
||||
|
||||
--- 31 ---{{{31
|
||||
31
|
||||
|
||||
--- 32 ---{{{32
|
||||
32
|
||||
|
||||
--- 33 ---{{{33
|
||||
33
|
||||
|
||||
--- 34 ---{{{34
|
||||
34
|
||||
|
||||
--- 35 ---{{{35
|
||||
35
|
||||
|
||||
--- 36 ---{{{36
|
||||
36
|
||||
|
||||
--- 37 ---{{{37
|
||||
37
|
||||
|
||||
--- 38 ---{{{38
|
||||
38
|
||||
|
||||
--- 39 ---{{{39
|
||||
39
|
||||
|
||||
--- 40 ---{{{40
|
||||
40
|
||||
|
||||
~~~ ~~~ THE END ~~~ ~~~{{{1
|
|
@ -0,0 +1,355 @@
|
|||
// :Voom asciidoc
|
||||
// Tests for VOoM asciidoc mode. This file is in utf-8 encoding.
|
||||
// vim: ft=asciidoc list fdm=manual
|
||||
|
||||
|
||||
|
||||
// Two-line style, levels 1 to 5 only
|
||||
Level 1
|
||||
=======
|
||||
|
||||
Level 2
|
||||
-------
|
||||
|
||||
Level 3
|
||||
~~~~~~~
|
||||
|
||||
Level 4
|
||||
^^^^^^^
|
||||
|
||||
Level 5
|
||||
+++++++
|
||||
|
||||
|
||||
|
||||
// One-line style
|
||||
= Level 1 =
|
||||
== Level 2 ==
|
||||
=== Level 3 ===
|
||||
==== Level 4 ====
|
||||
===== Level 5 =====
|
||||
====== Level 6 ======
|
||||
======= Level 7 =======
|
||||
|
||||
// Closing ='s are optional
|
||||
= Level 1
|
||||
== Level 2
|
||||
=== Level 3
|
||||
==== Level 4
|
||||
===== Level 5
|
||||
====== Level 6
|
||||
======= Level 7
|
||||
|
||||
There must be a whitespace between headline text and ='s. The number of closing
|
||||
='s must match the number of opening ='s.
|
||||
|
||||
//One-line style overrides two-line style:
|
||||
===== Level 5
|
||||
-------------
|
||||
listing
|
||||
-------------
|
||||
|
||||
|
||||
|
||||
|
||||
UNDERLINE SIZE
|
||||
==============
|
||||
|
||||
The underline must be of the same size as the title line +/- 2 chars.
|
||||
Both the underline and the title line must be at least 2 chars long.
|
||||
Trailing whitespace is always ignored and is not counted.
|
||||
|
||||
not headlines
|
||||
-------------
|
||||
|
||||
headline
|
||||
~~~~~
|
||||
|
||||
headline
|
||||
~~~~~~~~~~~
|
||||
|
||||
заголовок
|
||||
~~~~~~
|
||||
|
||||
заголовок
|
||||
~~~~~~~~~~~~
|
||||
|
||||
A
|
||||
---
|
||||
|
||||
|
||||
headlines, 5 of each
|
||||
--------------------
|
||||
|
||||
headline
|
||||
~~~~~~
|
||||
headline
|
||||
~~~~~~~
|
||||
headline
|
||||
~~~~~~~~
|
||||
headline
|
||||
~~~~~~~~~
|
||||
headline
|
||||
~~~~~~~~~~
|
||||
|
||||
заголовок
|
||||
~~~~~~~
|
||||
заголовок
|
||||
~~~~~~~~
|
||||
заголовок
|
||||
~~~~~~~~~
|
||||
заголовок
|
||||
~~~~~~~~~~
|
||||
заголовок
|
||||
~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
|
||||
BLOCKID, ATTRIBUTELIST
|
||||
======================
|
||||
|
||||
[[AAA]]
|
||||
== headline 1 ==
|
||||
|
||||
[AAA]
|
||||
== headline 2 ==
|
||||
|
||||
[[AAA]]
|
||||
[AAA]
|
||||
== headline 3 ==
|
||||
|
||||
[AAA]
|
||||
[[AAA]]
|
||||
== headline 4 ==
|
||||
|
||||
[AAA]
|
||||
[[AAA]]
|
||||
[AAA]
|
||||
== headline 5 ==
|
||||
text
|
||||
[AAA]
|
||||
== headline 6 ==
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
DELIMITED BLOCKS
|
||||
================
|
||||
|
||||
////
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
////
|
||||
|
||||
++++
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
++++
|
||||
|
||||
----
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
|
||||
....
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
....
|
||||
|
||||
****
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
****
|
||||
____
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
____
|
||||
|
||||
====
|
||||
== not headline ==
|
||||
not headline
|
||||
------------
|
||||
====
|
||||
|
||||
// ambiguious cases
|
||||
headline
|
||||
--------
|
||||
--------
|
||||
listing, not headline
|
||||
---------------------
|
||||
|
||||
|
||||
|
||||
|
||||
DISALLOWED UNDERLINED HEADLINES
|
||||
===============================
|
||||
|
||||
No headlines here. The underline starts Delimited Block.
|
||||
|
||||
//BlockID
|
||||
|
||||
[[AAA]]
|
||||
-------
|
||||
== not headline
|
||||
-------
|
||||
|
||||
//Attribute List
|
||||
|
||||
[AAA]
|
||||
-----
|
||||
== not headline
|
||||
-----
|
||||
|
||||
//Comment line (exactly two // at start)
|
||||
|
||||
//AAA
|
||||
-----
|
||||
== not headline
|
||||
-----
|
||||
|
||||
//Block Title, one dot is enough
|
||||
|
||||
.AAA
|
||||
----
|
||||
== not headline
|
||||
-----
|
||||
|
||||
//Tab at start of title line is also not allowed, don't know why
|
||||
|
||||
not headline
|
||||
------------
|
||||
== not headline
|
||||
-----
|
||||
|
||||
//An underlined headline cannot be just one character. They can in AsciiDoc.
|
||||
|
||||
A
|
||||
--
|
||||
|
||||
B
|
||||
---
|
||||
|
||||
//An underlined title cannot look like an underline or a Delimited Block line,
|
||||
//that is a line of only =,-,+, etc.
|
||||
|
||||
===
|
||||
---
|
||||
===
|
||||
|
||||
+++
|
||||
===
|
||||
^^^
|
||||
+++
|
||||
|
||||
|
||||
++
|
||||
==
|
||||
^^
|
||||
~~
|
||||
|
||||
|
||||
|
||||
BLANK LINES
|
||||
===========
|
||||
|
||||
A blank separator line is required in front of most headlines.
|
||||
But preceding [[]] and/or [] lines are treated as part of the headline.
|
||||
|
||||
// Wrong:
|
||||
|
||||
== headline ==
|
||||
text
|
||||
== not headline ==
|
||||
[[X1]]
|
||||
[blah]
|
||||
== not headline ==
|
||||
|
||||
// Correct:
|
||||
|
||||
== headline 1 ==
|
||||
text
|
||||
|
||||
== headline 2 ==
|
||||
|
||||
[[X1]]
|
||||
[blah]
|
||||
== headline 3 ==
|
||||
|
||||
// The second underline starts Delimited Block
|
||||
headline
|
||||
--------
|
||||
text
|
||||
not headline
|
||||
------------
|
||||
|
||||
not headline
|
||||
------------
|
||||
|
||||
// Comment lines before the headline are ignored
|
||||
|
||||
== headline 1 ==
|
||||
text
|
||||
// comment
|
||||
== not headline ==
|
||||
|
||||
// comment
|
||||
== headline 2 ==
|
||||
text
|
||||
|
||||
// comment
|
||||
// comment
|
||||
[blah]
|
||||
== headline 3 ==
|
||||
|
||||
// Blank line is NOT required between adjacent headlines
|
||||
|
||||
== headline 1 ==
|
||||
== headline 2 ==
|
||||
// comment
|
||||
== headline 3 ==
|
||||
headline 4
|
||||
----------
|
||||
[blah]
|
||||
headline 5
|
||||
----------
|
||||
|
||||
// after the end of a Delimited Block
|
||||
|
||||
== headline 1 ==
|
||||
----------------------------
|
||||
listing
|
||||
----------------------------
|
||||
== headline 2 ==
|
||||
|
||||
|
||||
GOTCHAS
|
||||
=======
|
||||
|
||||
There must be a blank line between a macro, an :atrrbute:, etc. and the
|
||||
following headline.
|
||||
The underline can be mistaken for a DelimitedBlock, which will kill subsequent
|
||||
headlines.
|
||||
|
||||
== headline
|
||||
|
||||
:numbered:
|
||||
== not headline
|
||||
|
||||
ifdef::something[]
|
||||
not headline
|
||||
------------
|
||||
== not headline
|
||||
---------------
|
||||
|
||||
== headline
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,433 @@
|
|||
:Voom asciidoc
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
|
||||
h 1
|
||||
===
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
[[X2]]
|
||||
h 1.1
|
||||
-----
|
||||
1.1 body
|
||||
|
||||
[[X2]]
|
||||
h 1.2
|
||||
-----
|
||||
1.2 body
|
||||
|
||||
|
||||
h 2
|
||||
===
|
||||
2 body
|
||||
|
||||
|
||||
h 3
|
||||
===
|
||||
3 body
|
||||
|
||||
[[X2]]
|
||||
h 3.1
|
||||
-----
|
||||
3.1 body
|
||||
|
||||
[[X2]]
|
||||
h 3.2
|
||||
-----
|
||||
3.2 body
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h 3.2.1
|
||||
~~~~~~~
|
||||
3.2.1 body
|
||||
|
||||
|
||||
h 3.2.1.1
|
||||
^^^^^^^^^
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h 3.2.2
|
||||
~~~~~~~
|
||||
3.2.2 body
|
||||
|
||||
|
||||
h 3.2.2.1
|
||||
^^^^^^^^^
|
||||
3.2.2.1 body
|
||||
|
||||
|
||||
h 3.2.2.1.1
|
||||
+++++++++++
|
||||
3.2.2.1.1 body
|
||||
|
||||
|
||||
====== h 3.2.2.1.2.1 ======
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
|
||||
======= h 3.2.2.1.2.1.1 =======
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
[[X2]]
|
||||
h 3.3
|
||||
-----
|
||||
3.3 body
|
||||
|
||||
|
||||
h 4
|
||||
===
|
||||
4 body
|
||||
|
||||
[[X2]]
|
||||
h 4.1
|
||||
-----
|
||||
4.1 body findme
|
||||
|
||||
|
||||
h 5
|
||||
===
|
||||
5 body
|
||||
|
||||
[[X2]]
|
||||
h 5.1
|
||||
-----
|
||||
5.1 body
|
||||
|
||||
[[X2]]
|
||||
h 5.2
|
||||
-----
|
||||
5.2 body
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h 5.2.1
|
||||
~~~~~~~
|
||||
5.2.1 body
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h 5.2.2
|
||||
~~~~~~~
|
||||
5.2.2 body
|
||||
|
||||
|
||||
h 5.2.2.1
|
||||
^^^^^^^^^
|
||||
5.2.2.1 body
|
||||
|
||||
|
||||
h 5.2.2.1.1
|
||||
+++++++++++
|
||||
5.2.2.1.1 body
|
||||
|
||||
|
||||
h 5.2.2.1.2
|
||||
+++++++++++
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h 5.2.3
|
||||
~~~~~~~
|
||||
5.2.3 body
|
||||
|
||||
[[X2]]
|
||||
h AA
|
||||
----
|
||||
a a a a
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h AA.1
|
||||
~~~~~~
|
||||
a1 a1 a1 a1
|
||||
|
||||
[[X2]]
|
||||
h BB
|
||||
----
|
||||
b b b b
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h BB.1
|
||||
~~~~~~
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
[[X2]]
|
||||
h 5.3
|
||||
-----
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
|
||||
h tests
|
||||
=======
|
||||
|
||||
[[X2]]
|
||||
h syntax tests
|
||||
--------------
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h //---TODO comment--- //
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h "---comment--- "
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
echo 'vim ok'
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h #---comment--- #
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
print 'py ok'
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h %---comment--- %
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h /*---comment--- /*
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h <!-- Comment
|
||||
~~~~~~~~~~~~~~
|
||||
ft=html,xml
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h html head <!
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h /organizer node/
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h !warning mark
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
[[X2]]
|
||||
h Voomgrep tests
|
||||
----------------
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h n44 breakfast
|
||||
~~~~~~~~~~~~~~~
|
||||
eggs
|
||||
bacon
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h n45 lunch
|
||||
~~~~~~~~~~~
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h n46 dinner
|
||||
~~~~~~~~~~~~
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h n47 snack
|
||||
~~~~~~~~~~~
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
[[X2]]
|
||||
h sort tests
|
||||
------------
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h node 2
|
||||
~~~~~~~~
|
||||
|
||||
|
||||
h dddd
|
||||
^^^^^^
|
||||
d1
|
||||
|
||||
|
||||
h eeee
|
||||
^^^^^^
|
||||
|
||||
|
||||
h dddd
|
||||
^^^^^^
|
||||
d2
|
||||
|
||||
|
||||
|
||||
h bbbb
|
||||
^^^^^^
|
||||
b
|
||||
|
||||
|
||||
h b_yyy
|
||||
+++++++
|
||||
|
||||
|
||||
h b_xxx
|
||||
+++++++
|
||||
|
||||
|
||||
h cccc
|
||||
^^^^^^
|
||||
c
|
||||
|
||||
|
||||
h aaaa
|
||||
^^^^^^
|
||||
a
|
||||
|
||||
h a_nnn
|
||||
+++++++
|
||||
|
||||
|
||||
h a_mmm
|
||||
+++++++
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h node 22
|
||||
~~~~~~~~~
|
||||
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h ñ
|
||||
~~~
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h Ñ
|
||||
~~~
|
||||
unicode tests
|
||||
|
||||
|
||||
h э
|
||||
^^^
|
||||
1
|
||||
|
||||
h Я
|
||||
^^^
|
||||
2
|
||||
|
||||
h ю
|
||||
^^^
|
||||
3
|
||||
|
||||
h Э
|
||||
^^^
|
||||
4
|
||||
|
||||
h я
|
||||
^^^
|
||||
5
|
||||
|
||||
h Ю
|
||||
^^^
|
||||
6
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h node 1
|
||||
~~~~~~~~
|
||||
|
||||
|
||||
h bbbb
|
||||
^^^^^^
|
||||
b
|
||||
|
||||
|
||||
h dddd
|
||||
^^^^^^
|
||||
d1
|
||||
|
||||
|
||||
h DDDD
|
||||
^^^^^^
|
||||
ingorecase test
|
||||
|
||||
|
||||
h aaaa
|
||||
^^^^^^
|
||||
a
|
||||
|
||||
h dddd
|
||||
^^^^^^
|
||||
d2
|
||||
|
||||
|
||||
|
||||
h cccc
|
||||
^^^^^^
|
||||
c
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h z
|
||||
~~~
|
||||
|
||||
[[X2]]
|
||||
h special chars tests
|
||||
---------------------
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h '" /\\/
|
||||
~~~~~~~~~
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
[[X3]]
|
||||
[ATTR]
|
||||
h Брожу ли я
|
||||
~~~~~~~~~~~~
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
:Voom hashes
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
# 1
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
## 1.1
|
||||
1.1 body
|
||||
|
||||
## 1.2
|
||||
1.2 body
|
||||
|
||||
# 2
|
||||
2 body
|
||||
|
||||
# 3
|
||||
3 body
|
||||
|
||||
## 3.1
|
||||
3.1 body
|
||||
|
||||
## 3.2
|
||||
3.2 body
|
||||
|
||||
### 3.2.1
|
||||
3.2.1 body
|
||||
|
||||
#### 3.2.1.1
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
### 3.2.2
|
||||
3.2.2 body
|
||||
|
||||
#### 3.2.2.1
|
||||
3.2.2.1 body
|
||||
|
||||
##### 3.2.2.1.1
|
||||
3.2.2.1.1 body
|
||||
|
||||
###### 3.2.2.1.2.1
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
####### 3.2.2.1.2.1.1
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
## 3.3
|
||||
3.3 body
|
||||
|
||||
# 4
|
||||
4 body
|
||||
|
||||
## 4.1
|
||||
4.1 body findme
|
||||
|
||||
# 5
|
||||
5 body
|
||||
|
||||
## 5.1
|
||||
5.1 body
|
||||
|
||||
## 5.2
|
||||
5.2 body
|
||||
|
||||
### 5.2.1
|
||||
5.2.1 body
|
||||
|
||||
### 5.2.2
|
||||
5.2.2 body
|
||||
|
||||
#### 5.2.2.1
|
||||
5.2.2.1 body
|
||||
|
||||
##### 5.2.2.1.1
|
||||
5.2.2.1.1 body
|
||||
|
||||
##### 5.2.2.1.2
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
### 5.2.3
|
||||
5.2.3 body
|
||||
|
||||
## AA
|
||||
a a a a
|
||||
|
||||
### AA.1
|
||||
a1 a1 a1 a1
|
||||
|
||||
## BB
|
||||
b b b b
|
||||
|
||||
### BB.1
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
## 5.3
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
# tests
|
||||
|
||||
## syntax tests
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
### //---TODO comment--- //
|
||||
|
||||
### "---comment--- "
|
||||
echo 'vim ok'
|
||||
|
||||
### #---comment--- #
|
||||
print 'py ok'
|
||||
|
||||
### %---comment--- %
|
||||
|
||||
### /*---comment--- /*
|
||||
|
||||
### <!-- Comment
|
||||
ft=html,xml
|
||||
|
||||
### html head <!
|
||||
|
||||
### /organizer node/
|
||||
|
||||
### !warning mark
|
||||
|
||||
## Voomgrep tests
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
### n44 breakfast
|
||||
eggs
|
||||
bacon
|
||||
|
||||
### n45 lunch
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
### n46 dinner
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
### n47 snack
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
## sort tests
|
||||
|
||||
### node 2
|
||||
|
||||
#### dddd
|
||||
d1
|
||||
|
||||
#### eeee
|
||||
|
||||
#### dddd
|
||||
d2
|
||||
|
||||
|
||||
#### bbbb
|
||||
b
|
||||
|
||||
##### b_yyy
|
||||
|
||||
##### b_xxx
|
||||
|
||||
#### cccc
|
||||
c
|
||||
|
||||
#### aaaa
|
||||
a
|
||||
##### a_nnn
|
||||
|
||||
##### a_mmm
|
||||
|
||||
### node 22
|
||||
|
||||
|
||||
### ñ
|
||||
|
||||
### Ñ
|
||||
unicode tests
|
||||
|
||||
#### э
|
||||
1
|
||||
#### Я
|
||||
2
|
||||
#### ю
|
||||
3
|
||||
#### Э
|
||||
4
|
||||
#### я
|
||||
5
|
||||
#### Ю
|
||||
6
|
||||
|
||||
### node 1
|
||||
|
||||
#### bbbb
|
||||
b
|
||||
|
||||
#### dddd
|
||||
d1
|
||||
|
||||
#### DDDD
|
||||
ingorecase test
|
||||
|
||||
#### aaaa
|
||||
a
|
||||
#### dddd
|
||||
d2
|
||||
|
||||
|
||||
#### cccc
|
||||
c
|
||||
|
||||
### z
|
||||
|
||||
## special chars tests
|
||||
|
||||
### '" /\\/
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
### Брожу ли я
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
:Voom html
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
<h1>1</h1> <!--{{{1-->
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
<h2>1.1</h2> <!--{{{2-->
|
||||
1.1 body
|
||||
|
||||
<h2>1.2</h2> <!--{{{2-->
|
||||
1.2 body
|
||||
|
||||
<h1>2</h1> <!--{{{1-->
|
||||
2 body
|
||||
|
||||
<h1>3</h1> <!--{{{1o=-->
|
||||
3 body
|
||||
|
||||
<h2>3.1</h2> <!--{{{2x-->
|
||||
3.1 body
|
||||
|
||||
<h2>3.2</h2> <!--{{{2x-->
|
||||
3.2 body
|
||||
|
||||
<h3>3.2.1</h3> <!--{{{3-->
|
||||
3.2.1 body
|
||||
|
||||
<h4>3.2.1.1</h4> <!--{{{4-->
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
<h3>3.2.2</h3> <!--{{{3-->
|
||||
3.2.2 body
|
||||
|
||||
<h4>3.2.2.1</h4> <!--{{{4x-->
|
||||
3.2.2.1 body
|
||||
|
||||
<h5>3.2.2.1.1</h5> <!--{{{5x-->
|
||||
3.2.2.1.1 body
|
||||
|
||||
<h6>3.2.2.1.2.1</h6> <!--{{{6-->
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
<h7>3.2.2.1.2.1.1</h7> <!--{{{7x-->
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
<h2>3.3</h2> <!--{{{2-->
|
||||
3.3 body
|
||||
|
||||
<h1>4</h1> <!--{{{1-->
|
||||
4 body
|
||||
|
||||
<h2>4.1</h2> <!--{{{2-->
|
||||
4.1 body findme
|
||||
|
||||
<h1>5</h1> <!--{{{1o-->
|
||||
5 body
|
||||
|
||||
<h2>5.1</h2> <!--{{{2-->
|
||||
5.1 body
|
||||
|
||||
<h2>5.2</h2> <!--{{{2o-->
|
||||
5.2 body
|
||||
|
||||
<h3>5.2.1</h3> <!--{{{3-->
|
||||
5.2.1 body
|
||||
|
||||
<h3>5.2.2</h3> <!--{{{3-->
|
||||
5.2.2 body
|
||||
|
||||
<h4>5.2.2.1</h4> <!--{{{4o-->
|
||||
5.2.2.1 body
|
||||
|
||||
<h5>5.2.2.1.1</h5> <!--{{{5-->
|
||||
5.2.2.1.1 body
|
||||
|
||||
<h5>5.2.2.1.2</h5> <!--{{{5-->
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
<h3>5.2.3</h3> <!--{{{3-->
|
||||
5.2.3 body
|
||||
|
||||
<h2>AA</h2> <!--{{{2-->
|
||||
a a a a
|
||||
|
||||
<h3>AA.1</h3> <!--{{{3-->
|
||||
a1 a1 a1 a1
|
||||
|
||||
<h2>BB</h2> <!--{{{2-->
|
||||
b b b b
|
||||
|
||||
<h3>BB.1</h3> <!--{{{3-->
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
<h2>5.3</h2> <!--{{{2-->
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
<h1>tests</h1> <!--{{{1o-->
|
||||
|
||||
<h2>syntax tests</h2> <!--{{{2-->
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
<h3>//---TODO comment--- //</h3> <!--{{{3-->
|
||||
|
||||
<h3>"---comment--- "</h3> <!--{{{3-->
|
||||
echo 'vim ok'
|
||||
|
||||
<h3>#---comment--- #</h3> <!--{{{3-->
|
||||
print 'py ok'
|
||||
|
||||
<h3>%---comment--- %</h3> <!--{{{3-->
|
||||
|
||||
<h3>/*---comment--- /*</h3> <!--{{{3*/-->
|
||||
|
||||
<h3><!-- Comment</h3> <!--{{{3 -->-->
|
||||
ft=html,xml
|
||||
|
||||
<h3>html head <!</h3> <!--{{{3-->-->
|
||||
|
||||
<h3>/organizer node/</h3> <!--{{{3-->
|
||||
|
||||
<h3>!warning mark</h3> <!--{{{3-->
|
||||
|
||||
<h2>Voomgrep tests</h2> <!--{{{2-->
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
<h3>n44 breakfast</h3> <!--{{{3-->
|
||||
eggs
|
||||
bacon
|
||||
|
||||
<h3>n45 lunch</h3> <!--{{{3-->
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
<h3>n46 dinner</h3> <!--{{{3-->
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
<h3>n47 snack</h3> <!--{{{3-->
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
<h2>sort tests</h2> <!--{{{2-->
|
||||
|
||||
<h3>node 2</h3> <!--{{{3-->
|
||||
|
||||
<h4>dddd</h4> <!--{{{4x-->
|
||||
d1
|
||||
|
||||
<h4>eeee</h4> <!--{{{4-->
|
||||
|
||||
<h4>dddd</h4> <!--{{{4-->
|
||||
d2
|
||||
|
||||
|
||||
<h4>bbbb</h4> <!--{{{4o-->
|
||||
b
|
||||
|
||||
<h5>b_yyy</h5> <!--{{{5-->
|
||||
|
||||
<h5>b_xxx</h5> <!--{{{5-->
|
||||
|
||||
<h4>cccc</h4> <!--{{{4-->
|
||||
c
|
||||
|
||||
<h4>aaaa</h4> <!--{{{4-->
|
||||
a
|
||||
<h5>a_nnn</h5> <!--{{{5-->
|
||||
|
||||
<h5>a_mmm</h5> <!--{{{5-->
|
||||
|
||||
<h3>node 22</h3> <!--{{{3-->
|
||||
|
||||
|
||||
<h3>ñ</h3> <!--{{{3-->
|
||||
|
||||
<h3>Ñ</h3> <!--{{{3-->
|
||||
unicode tests
|
||||
|
||||
<h4>э</h4> <!--{{{4-->
|
||||
1
|
||||
<h4>Я</h4> <!--{{{4-->
|
||||
2
|
||||
<h4>ю</h4> <!--{{{4-->
|
||||
3
|
||||
<h4>Э</h4> <!--{{{4-->
|
||||
4
|
||||
<h4>я</h4> <!--{{{4-->
|
||||
5
|
||||
<h4>Ю</h4> <!--{{{4-->
|
||||
6
|
||||
|
||||
<h3>node 1</h3> <!--{{{3-->
|
||||
|
||||
<h4>bbbb</h4> <!--{{{4-->
|
||||
b
|
||||
|
||||
<h4>dddd</h4> <!--{{{4-->
|
||||
d1
|
||||
|
||||
<h4>DDDD</h4> <!--{{{4-->
|
||||
ingorecase test
|
||||
|
||||
<h4>aaaa</h4> <!--{{{4-->
|
||||
a
|
||||
<h4>dddd</h4> <!--{{{4-->
|
||||
d2
|
||||
|
||||
|
||||
<h4>cccc</h4> <!--{{{4-->
|
||||
c
|
||||
|
||||
<h3>z</h3> <!--{{{3-->
|
||||
|
||||
<h2>special chars tests</h2> <!--{{{2-->
|
||||
|
||||
<h3>'" /\\/</h3> <!--{{{3 '" /\\/-->
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
<h3>Брожу ли я</h3> <!--{{{3 вдоль улиц шумных? (utf-8)-->
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,270 @@
|
|||
:Voom markdown
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
h1
|
||||
==
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
h1.1
|
||||
----
|
||||
1.1 body
|
||||
|
||||
h1.2
|
||||
----
|
||||
1.2 body
|
||||
|
||||
h2
|
||||
==
|
||||
2 body
|
||||
|
||||
h3
|
||||
==
|
||||
3 body
|
||||
|
||||
h3.1
|
||||
----
|
||||
3.1 body
|
||||
|
||||
h3.2
|
||||
----
|
||||
3.2 body
|
||||
|
||||
### h3.2.1 ###
|
||||
3.2.1 body
|
||||
|
||||
#### h3.2.1.1 ####
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
### h3.2.2 ###
|
||||
3.2.2 body
|
||||
|
||||
#### h3.2.2.1 ####
|
||||
3.2.2.1 body
|
||||
|
||||
##### h3.2.2.1.1 #####
|
||||
3.2.2.1.1 body
|
||||
|
||||
###### h3.2.2.1.2.1 ######
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
####### h3.2.2.1.2.1.1 #######
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
h3.3
|
||||
----
|
||||
3.3 body
|
||||
|
||||
h4
|
||||
==
|
||||
4 body
|
||||
|
||||
h4.1
|
||||
----
|
||||
4.1 body findme
|
||||
|
||||
h5
|
||||
==
|
||||
5 body
|
||||
|
||||
h5.1
|
||||
----
|
||||
5.1 body
|
||||
|
||||
h5.2
|
||||
----
|
||||
5.2 body
|
||||
|
||||
### h5.2.1 ###
|
||||
5.2.1 body
|
||||
|
||||
### h5.2.2 ###
|
||||
5.2.2 body
|
||||
|
||||
#### h5.2.2.1 ####
|
||||
5.2.2.1 body
|
||||
|
||||
##### h5.2.2.1.1 #####
|
||||
5.2.2.1.1 body
|
||||
|
||||
##### h5.2.2.1.2 #####
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
### h5.2.3 ###
|
||||
5.2.3 body
|
||||
|
||||
hAA
|
||||
---
|
||||
a a a a
|
||||
|
||||
### hAA.1 ###
|
||||
a1 a1 a1 a1
|
||||
|
||||
hBB
|
||||
---
|
||||
b b b b
|
||||
|
||||
### hBB.1 ###
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
h5.3
|
||||
----
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
htests
|
||||
======
|
||||
|
||||
hsyntax tests
|
||||
-------------
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
### h//---TODO comment--- // ###
|
||||
|
||||
### h"---comment--- " ###
|
||||
echo 'vim ok'
|
||||
|
||||
### h#---comment--- # ###
|
||||
print 'py ok'
|
||||
|
||||
### h%---comment--- % ###
|
||||
|
||||
### h/*---comment--- /* ###
|
||||
|
||||
### h<!-- Comment ###
|
||||
ft=html,xml
|
||||
|
||||
### hhtml head <! ###
|
||||
|
||||
### h/organizer node/ ###
|
||||
|
||||
### h!warning mark ###
|
||||
|
||||
hVoomgrep tests
|
||||
---------------
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
### hn44 breakfast ###
|
||||
eggs
|
||||
bacon
|
||||
|
||||
### hn45 lunch ###
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
### hn46 dinner ###
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
### hn47 snack ###
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
hsort tests
|
||||
-----------
|
||||
|
||||
### hnode 2 ###
|
||||
|
||||
#### hdddd ####
|
||||
d1
|
||||
|
||||
#### heeee ####
|
||||
|
||||
#### hdddd ####
|
||||
d2
|
||||
|
||||
|
||||
#### hbbbb ####
|
||||
b
|
||||
|
||||
##### hb_yyy #####
|
||||
|
||||
##### hb_xxx #####
|
||||
|
||||
#### hcccc ####
|
||||
c
|
||||
|
||||
#### haaaa ####
|
||||
a
|
||||
##### ha_nnn #####
|
||||
|
||||
##### ha_mmm #####
|
||||
|
||||
### hnode 22 ###
|
||||
|
||||
|
||||
### hñ ###
|
||||
|
||||
### hÑ ###
|
||||
unicode tests
|
||||
|
||||
#### hэ ####
|
||||
1
|
||||
#### hЯ ####
|
||||
2
|
||||
#### hю ####
|
||||
3
|
||||
#### hЭ ####
|
||||
4
|
||||
#### hя ####
|
||||
5
|
||||
#### hЮ ####
|
||||
6
|
||||
|
||||
### hnode 1 ###
|
||||
|
||||
#### hbbbb ####
|
||||
b
|
||||
|
||||
#### hdddd ####
|
||||
d1
|
||||
|
||||
#### hDDDD ####
|
||||
ingorecase test
|
||||
|
||||
#### haaaa ####
|
||||
a
|
||||
#### hdddd ####
|
||||
d2
|
||||
|
||||
|
||||
#### hcccc ####
|
||||
c
|
||||
|
||||
### hz ###
|
||||
|
||||
hspecial chars tests
|
||||
--------------------
|
||||
|
||||
### h'" /\\/ ###
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
### hБрожу ли я ###
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
:Voom org
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
* 1
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
** 1.1
|
||||
1.1 body
|
||||
|
||||
** 1.2
|
||||
1.2 body
|
||||
|
||||
* 2
|
||||
2 body
|
||||
|
||||
* 3
|
||||
3 body
|
||||
|
||||
** 3.1
|
||||
3.1 body
|
||||
|
||||
** 3.2
|
||||
3.2 body
|
||||
|
||||
*** 3.2.1
|
||||
3.2.1 body
|
||||
|
||||
**** 3.2.1.1
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
*** 3.2.2
|
||||
3.2.2 body
|
||||
|
||||
**** 3.2.2.1
|
||||
3.2.2.1 body
|
||||
|
||||
***** 3.2.2.1.1
|
||||
3.2.2.1.1 body
|
||||
|
||||
****** 3.2.2.1.2.1
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
******* 3.2.2.1.2.1.1
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
** 3.3
|
||||
3.3 body
|
||||
|
||||
* 4
|
||||
4 body
|
||||
|
||||
** 4.1
|
||||
4.1 body findme
|
||||
|
||||
* 5
|
||||
5 body
|
||||
|
||||
** 5.1
|
||||
5.1 body
|
||||
|
||||
** 5.2
|
||||
5.2 body
|
||||
|
||||
*** 5.2.1
|
||||
5.2.1 body
|
||||
|
||||
*** 5.2.2
|
||||
5.2.2 body
|
||||
|
||||
**** 5.2.2.1
|
||||
5.2.2.1 body
|
||||
|
||||
***** 5.2.2.1.1
|
||||
5.2.2.1.1 body
|
||||
|
||||
***** 5.2.2.1.2
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
*** 5.2.3
|
||||
5.2.3 body
|
||||
|
||||
** AA
|
||||
a a a a
|
||||
|
||||
*** AA.1
|
||||
a1 a1 a1 a1
|
||||
|
||||
** BB
|
||||
b b b b
|
||||
|
||||
*** BB.1
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
** 5.3
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
* tests
|
||||
|
||||
** syntax tests
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
*** //---TODO comment--- //
|
||||
|
||||
*** "---comment--- "
|
||||
echo 'vim ok'
|
||||
|
||||
*** #---comment--- #
|
||||
print 'py ok'
|
||||
|
||||
*** %---comment--- %
|
||||
|
||||
*** /*---comment--- /*
|
||||
|
||||
*** <!-- Comment
|
||||
ft=html,xml
|
||||
|
||||
*** html head <!
|
||||
|
||||
*** /organizer node/
|
||||
|
||||
*** !warning mark
|
||||
|
||||
** Voomgrep tests
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
*** n44 breakfast
|
||||
eggs
|
||||
bacon
|
||||
|
||||
*** n45 lunch
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
*** n46 dinner
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
*** n47 snack
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
** sort tests
|
||||
|
||||
*** node 2
|
||||
|
||||
**** dddd
|
||||
d1
|
||||
|
||||
**** eeee
|
||||
|
||||
**** dddd
|
||||
d2
|
||||
|
||||
|
||||
**** bbbb
|
||||
b
|
||||
|
||||
***** b_yyy
|
||||
|
||||
***** b_xxx
|
||||
|
||||
**** cccc
|
||||
c
|
||||
|
||||
**** aaaa
|
||||
a
|
||||
***** a_nnn
|
||||
|
||||
***** a_mmm
|
||||
|
||||
*** node 22
|
||||
|
||||
|
||||
*** ñ
|
||||
|
||||
*** Ñ
|
||||
unicode tests
|
||||
|
||||
**** э
|
||||
1
|
||||
**** Я
|
||||
2
|
||||
**** ю
|
||||
3
|
||||
**** Э
|
||||
4
|
||||
**** я
|
||||
5
|
||||
**** Ю
|
||||
6
|
||||
|
||||
*** node 1
|
||||
|
||||
**** bbbb
|
||||
b
|
||||
|
||||
**** dddd
|
||||
d1
|
||||
|
||||
**** DDDD
|
||||
ingorecase test
|
||||
|
||||
**** aaaa
|
||||
a
|
||||
**** dddd
|
||||
d2
|
||||
|
||||
|
||||
**** cccc
|
||||
c
|
||||
|
||||
*** z
|
||||
|
||||
** special chars tests
|
||||
|
||||
*** '" /\\/
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
*** Брожу ли я
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
| :Voom thevimoutliner
|
||||
| This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
| findme findme2
|
||||
|
||||
1
|
||||
| 1 body
|
||||
| NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
| VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
1.1
|
||||
| 1.1 body
|
||||
|
||||
1.2
|
||||
| 1.2 body
|
||||
|
||||
2
|
||||
| 2 body
|
||||
|
||||
3
|
||||
| 3 body
|
||||
|
||||
3.1
|
||||
| 3.1 body
|
||||
|
||||
3.2
|
||||
| 3.2 body
|
||||
|
||||
3.2.1
|
||||
| 3.2.1 body
|
||||
|
||||
3.2.1.1
|
||||
| 3.2.1.1 body
|
||||
| xxxx findme findme
|
||||
|
||||
3.2.2
|
||||
| 3.2.2 body
|
||||
|
||||
3.2.2.1
|
||||
| 3.2.2.1 body
|
||||
|
||||
3.2.2.1.1
|
||||
| 3.2.2.1.1 body
|
||||
|
||||
3.2.2.1.2.1
|
||||
| 3.2.2.1.2.1 body
|
||||
|
||||
3.2.2.1.2.1.1
|
||||
| 3.2.2.1.2.1.1 body
|
||||
|
||||
3.3
|
||||
| 3.3 body
|
||||
|
||||
4
|
||||
| 4 body
|
||||
|
||||
4.1
|
||||
| 4.1 body findme
|
||||
|
||||
5
|
||||
| 5 body
|
||||
|
||||
5.1
|
||||
| 5.1 body
|
||||
|
||||
5.2
|
||||
| 5.2 body
|
||||
|
||||
5.2.1
|
||||
| 5.2.1 body
|
||||
|
||||
5.2.2
|
||||
| 5.2.2 body
|
||||
|
||||
5.2.2.1
|
||||
| 5.2.2.1 body
|
||||
|
||||
5.2.2.1.1
|
||||
| 5.2.2.1.1 body
|
||||
|
||||
5.2.2.1.2
|
||||
| 5.2.2.1.2 body
|
||||
|
||||
|
||||
5.2.3
|
||||
| 5.2.3 body
|
||||
|
||||
AA
|
||||
| a a a a
|
||||
|
||||
AA.1
|
||||
| a1 a1 a1 a1
|
||||
|
||||
BB
|
||||
| b b b b
|
||||
|
||||
BB.1
|
||||
| b1 b1 b1 b1 b1
|
||||
|
||||
5.3
|
||||
| 5.3 body
|
||||
| findme
|
||||
|
||||
tests
|
||||
|
||||
syntax tests
|
||||
| Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
| Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
//---TODO comment--- //
|
||||
|
||||
"---comment--- "
|
||||
| echo 'vim ok'
|
||||
|
||||
#---comment--- #
|
||||
| print 'py ok'
|
||||
|
||||
%---comment--- %
|
||||
|
||||
/*---comment--- /*
|
||||
|
||||
\<!-- Comment
|
||||
| ft=html,xml
|
||||
|
||||
html head \<!
|
||||
|
||||
/organizer node/
|
||||
|
||||
!warning mark
|
||||
|
||||
Voomgrep tests
|
||||
| :Voomg Spam and ham not bacon
|
||||
| :Voomg Spam and\ ham not\ bacon
|
||||
| :Voomg Spam and\\ ham not\\ bacon
|
||||
| \Spam// ' "
|
||||
|
||||
n44 breakfast
|
||||
| eggs
|
||||
| bacon
|
||||
|
||||
n45 lunch
|
||||
| Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
| Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
| Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
| ham
|
||||
|
||||
n46 dinner
|
||||
| eggs
|
||||
| Spam
|
||||
| ham
|
||||
|
||||
n47 snack
|
||||
| bacon
|
||||
| spam
|
||||
| HAM
|
||||
| beef
|
||||
|
||||
sort tests
|
||||
|
||||
node 2
|
||||
|
||||
dddd
|
||||
| d1
|
||||
|
||||
eeee
|
||||
|
||||
dddd
|
||||
| d2
|
||||
|
||||
|
||||
bbbb
|
||||
| b
|
||||
|
||||
b_yyy
|
||||
|
||||
b_xxx
|
||||
|
||||
cccc
|
||||
| c
|
||||
|
||||
aaaa
|
||||
| a
|
||||
a_nnn
|
||||
|
||||
a_mmm
|
||||
|
||||
node 22
|
||||
|
||||
|
||||
ñ
|
||||
|
||||
Ñ
|
||||
| unicode tests
|
||||
|
||||
э
|
||||
| 1
|
||||
Я
|
||||
| 2
|
||||
ю
|
||||
| 3
|
||||
Э
|
||||
| 4
|
||||
я
|
||||
| 5
|
||||
Ю
|
||||
| 6
|
||||
|
||||
node 1
|
||||
|
||||
bbbb
|
||||
| b
|
||||
|
||||
dddd
|
||||
| d1
|
||||
|
||||
DDDD
|
||||
| ingorecase test
|
||||
|
||||
aaaa
|
||||
| a
|
||||
dddd
|
||||
| d2
|
||||
|
||||
|
||||
cccc
|
||||
| c
|
||||
|
||||
z
|
||||
|
||||
special chars tests
|
||||
|
||||
'" /\\/
|
||||
| " "" """
|
||||
| ' '' """
|
||||
| \ \\ \\\
|
||||
| / // ///
|
||||
| \//\
|
||||
|
||||
Брожу ли я
|
||||
| Брожу. Чего ж не побродить.
|
||||
|
||||
| Чебурашка CHeburashka
|
||||
| u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
| utf-8
|
||||
| '\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
# :Voom python
|
||||
# VOoM test file for Python outlining mode
|
||||
# no gotchas--oultine operations do not kill or create headlines
|
||||
# vim: et ts=4 sw=4 sts=4 fdm=manual
|
||||
|
||||
"""
|
||||
docstring
|
||||
def func_in_docstring():
|
||||
pass
|
||||
# not COMMENT
|
||||
after func_in_docstring
|
||||
"""
|
||||
|
||||
a = [1, # COMMENT, headline
|
||||
# COMMENT, not headline
|
||||
2]
|
||||
# line continuation
|
||||
s = "oosp\
|
||||
class Fake\
|
||||
pass \
|
||||
"
|
||||
|
||||
s2 = """
|
||||
xx
|
||||
yy
|
||||
closing " " " must not be mistaken for start of docstring
|
||||
"""
|
||||
|
||||
### if 1
|
||||
# NEXT LINE IS FOR TEST SUITE -- DO NOT MOVE OR EDIT
|
||||
# VO.levels=[1, 1, 2, 3, 3, 1, 1, 1, 2, 3, 3, 3, 2, 2, 1, 1, 1, 2, 3, 3, 1, 1, 1, 1, 1]
|
||||
if 1:
|
||||
### if 1
|
||||
if 1:
|
||||
def func1(a,
|
||||
b,
|
||||
c):
|
||||
"""
|
||||
docstring
|
||||
"""
|
||||
pass
|
||||
#--- headline 1
|
||||
|
||||
def func_with_string(a, b, c=False, d="NoName",
|
||||
e=None, f=0, g='Oopsy'):
|
||||
"""
|
||||
text text text text
|
||||
"""
|
||||
|
||||
#---- headline before Class1
|
||||
class Class1:
|
||||
b = []
|
||||
def func2():
|
||||
### headline 2
|
||||
a = 'a'
|
||||
def func3():
|
||||
pass
|
||||
#----- headline 3
|
||||
#----headline 4
|
||||
def func4(): pass
|
||||
|
||||
#----- headline 5
|
||||
# not headline
|
||||
def func4(f):
|
||||
'''
|
||||
badly indented docstring
|
||||
'''
|
||||
pass
|
||||
|
||||
class Class2:
|
||||
u" perversely formatted docstring \
|
||||
perversely formatted docstring"
|
||||
b = []
|
||||
def func5():
|
||||
pass
|
||||
def func6():
|
||||
pass
|
||||
#--- headline 6
|
||||
#---- headline 7
|
||||
# not a headline
|
||||
|
||||
def func7(func):
|
||||
a = \
|
||||
"perverted continuation"
|
||||
pass
|
||||
|
||||
@func7
|
||||
def func8(): # <-- headline
|
||||
a = 1
|
||||
b = [1,
|
||||
2, # <-- false headline
|
||||
3]
|
||||
c = 4
|
||||
|
||||
### if __name__=='__main__':
|
||||
if __name__=='__main__':
|
||||
print Class2.__doc__
|
|
@ -0,0 +1,408 @@
|
|||
:Voom rest
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
NOTE: no gotchas, suitable for test suite
|
||||
|
||||
findme findme2
|
||||
|
||||
=
|
||||
1
|
||||
=
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
---
|
||||
1.1
|
||||
---
|
||||
1.1 body
|
||||
|
||||
---
|
||||
1.2
|
||||
---
|
||||
1.2 body
|
||||
|
||||
=
|
||||
2
|
||||
=
|
||||
2 body
|
||||
|
||||
=
|
||||
3
|
||||
=
|
||||
3 body
|
||||
|
||||
---
|
||||
3.1
|
||||
---
|
||||
3.1 body
|
||||
|
||||
---
|
||||
3.2
|
||||
---
|
||||
3.2 body
|
||||
|
||||
|
||||
3.2.1
|
||||
=====
|
||||
3.2.1 body
|
||||
|
||||
|
||||
3.2.1.1
|
||||
-------
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
|
||||
3.2.2
|
||||
=====
|
||||
3.2.2 body
|
||||
|
||||
|
||||
3.2.2.1
|
||||
-------
|
||||
3.2.2.1 body
|
||||
|
||||
|
||||
3.2.2.1.1
|
||||
*********
|
||||
3.2.2.1.1 body
|
||||
|
||||
|
||||
3.2.2.1.2.1
|
||||
"""""""""""
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
|
||||
3.2.2.1.2.1.1
|
||||
'''''''''''''
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
---
|
||||
3.3
|
||||
---
|
||||
3.3 body
|
||||
|
||||
=
|
||||
4
|
||||
=
|
||||
4 body
|
||||
|
||||
---
|
||||
4.1
|
||||
---
|
||||
4.1 body findme
|
||||
|
||||
=
|
||||
5
|
||||
=
|
||||
5 body
|
||||
|
||||
---
|
||||
5.1
|
||||
---
|
||||
5.1 body
|
||||
|
||||
---
|
||||
5.2
|
||||
---
|
||||
5.2 body
|
||||
|
||||
|
||||
5.2.1
|
||||
=====
|
||||
5.2.1 body
|
||||
|
||||
|
||||
5.2.2
|
||||
=====
|
||||
5.2.2 body
|
||||
|
||||
|
||||
5.2.2.1
|
||||
-------
|
||||
5.2.2.1 body
|
||||
|
||||
|
||||
5.2.2.1.1
|
||||
*********
|
||||
5.2.2.1.1 body
|
||||
|
||||
|
||||
5.2.2.1.2
|
||||
*********
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
|
||||
5.2.3
|
||||
=====
|
||||
5.2.3 body
|
||||
|
||||
--
|
||||
AA
|
||||
--
|
||||
a a a a
|
||||
|
||||
|
||||
AA.1
|
||||
====
|
||||
a1 a1 a1 a1
|
||||
|
||||
--
|
||||
BB
|
||||
--
|
||||
b b b b
|
||||
|
||||
|
||||
BB.1
|
||||
====
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
---
|
||||
5.3
|
||||
---
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
=====
|
||||
tests
|
||||
=====
|
||||
|
||||
------------
|
||||
syntax tests
|
||||
------------
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
|
||||
//---TODO comment--- //
|
||||
=======================
|
||||
|
||||
|
||||
"---comment--- "
|
||||
================
|
||||
echo 'vim ok'
|
||||
|
||||
|
||||
#---comment--- #
|
||||
================
|
||||
print 'py ok'
|
||||
|
||||
|
||||
%---comment--- %
|
||||
================
|
||||
|
||||
|
||||
/*---comment--- /*
|
||||
==================
|
||||
|
||||
|
||||
<!-- Comment
|
||||
============
|
||||
ft=html,xml
|
||||
|
||||
|
||||
html head <!
|
||||
============
|
||||
|
||||
|
||||
/organizer node/
|
||||
================
|
||||
|
||||
|
||||
!warning mark
|
||||
=============
|
||||
|
||||
--------------
|
||||
Voomgrep tests
|
||||
--------------
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
|
||||
n44 breakfast
|
||||
=============
|
||||
eggs
|
||||
bacon
|
||||
|
||||
|
||||
n45 lunch
|
||||
=========
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
|
||||
n46 dinner
|
||||
==========
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
|
||||
n47 snack
|
||||
=========
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
----------
|
||||
sort tests
|
||||
----------
|
||||
|
||||
|
||||
node 2
|
||||
======
|
||||
|
||||
|
||||
dddd
|
||||
----
|
||||
d1
|
||||
|
||||
|
||||
eeee
|
||||
----
|
||||
|
||||
|
||||
dddd
|
||||
----
|
||||
d2
|
||||
|
||||
|
||||
|
||||
bbbb
|
||||
----
|
||||
b
|
||||
|
||||
|
||||
b_yyy
|
||||
*****
|
||||
|
||||
|
||||
b_xxx
|
||||
*****
|
||||
|
||||
|
||||
cccc
|
||||
----
|
||||
c
|
||||
|
||||
|
||||
aaaa
|
||||
----
|
||||
a
|
||||
|
||||
a_nnn
|
||||
*****
|
||||
|
||||
|
||||
a_mmm
|
||||
*****
|
||||
|
||||
|
||||
node 22
|
||||
=======
|
||||
|
||||
|
||||
|
||||
ñ
|
||||
=
|
||||
|
||||
|
||||
Ñ
|
||||
=
|
||||
unicode tests
|
||||
|
||||
|
||||
э
|
||||
-
|
||||
1
|
||||
|
||||
Я
|
||||
-
|
||||
2
|
||||
|
||||
ю
|
||||
-
|
||||
3
|
||||
|
||||
Э
|
||||
-
|
||||
4
|
||||
|
||||
я
|
||||
-
|
||||
5
|
||||
|
||||
Ю
|
||||
-
|
||||
6
|
||||
|
||||
|
||||
node 1
|
||||
======
|
||||
|
||||
|
||||
bbbb
|
||||
----
|
||||
b
|
||||
|
||||
|
||||
dddd
|
||||
----
|
||||
d1
|
||||
|
||||
|
||||
DDDD
|
||||
----
|
||||
ingorecase test
|
||||
|
||||
|
||||
aaaa
|
||||
----
|
||||
a
|
||||
|
||||
dddd
|
||||
----
|
||||
d2
|
||||
|
||||
|
||||
|
||||
cccc
|
||||
----
|
||||
c
|
||||
|
||||
|
||||
z
|
||||
=
|
||||
|
||||
-------------------
|
||||
special chars tests
|
||||
-------------------
|
||||
|
||||
|
||||
'" /\\/
|
||||
=======
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
|
||||
Брожу ли я
|
||||
==========
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
:Voom txt2tags
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
= 1 =[ref]
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
== 1.1 ==[ref]
|
||||
1.1 body
|
||||
|
||||
== 1.2 ==[ref]
|
||||
1.2 body
|
||||
|
||||
= 2 =[ref]
|
||||
2 body
|
||||
|
||||
= 3 =[ref]
|
||||
3 body
|
||||
|
||||
== 3.1 ==[ref]
|
||||
3.1 body
|
||||
|
||||
== 3.2 ==[ref]
|
||||
3.2 body
|
||||
|
||||
+++ 3.2.1 +++[ref]
|
||||
3.2.1 body
|
||||
|
||||
++++ 3.2.1.1 ++++[ref]
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
+++ 3.2.2 +++[ref]
|
||||
3.2.2 body
|
||||
|
||||
++++ 3.2.2.1 ++++[ref]
|
||||
3.2.2.1 body
|
||||
|
||||
+++++ 3.2.2.1.1 +++++[ref]
|
||||
3.2.2.1.1 body
|
||||
|
||||
++++++ 3.2.2.1.2.1 ++++++[ref]
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
+++++++ 3.2.2.1.2.1.1 +++++++[ref]
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
== 3.3 ==[ref]
|
||||
3.3 body
|
||||
|
||||
= 4 =[ref]
|
||||
4 body
|
||||
|
||||
== 4.1 ==[ref]
|
||||
4.1 body findme
|
||||
|
||||
= 5 =[ref]
|
||||
5 body
|
||||
|
||||
== 5.1 ==[ref]
|
||||
5.1 body
|
||||
|
||||
== 5.2 ==[ref]
|
||||
5.2 body
|
||||
|
||||
+++ 5.2.1 +++[ref]
|
||||
5.2.1 body
|
||||
|
||||
+++ 5.2.2 +++[ref]
|
||||
5.2.2 body
|
||||
|
||||
++++ 5.2.2.1 ++++[ref]
|
||||
5.2.2.1 body
|
||||
|
||||
+++++ 5.2.2.1.1 +++++[ref]
|
||||
5.2.2.1.1 body
|
||||
|
||||
+++++ 5.2.2.1.2 +++++[ref]
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
+++ 5.2.3 +++[ref]
|
||||
5.2.3 body
|
||||
|
||||
== AA ==[ref]
|
||||
a a a a
|
||||
|
||||
+++ AA.1 +++[ref]
|
||||
a1 a1 a1 a1
|
||||
|
||||
== BB ==[ref]
|
||||
b b b b
|
||||
|
||||
+++ BB.1 +++[ref]
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
== 5.3 ==[ref]
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
= tests =[ref]
|
||||
|
||||
== syntax tests ==[ref]
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
+++ //---TODO comment--- // +++[ref]
|
||||
|
||||
+++ "---comment--- " +++[ref]
|
||||
echo 'vim ok'
|
||||
|
||||
+++ #---comment--- # +++[ref]
|
||||
print 'py ok'
|
||||
|
||||
+++ %---comment--- % +++[ref]
|
||||
|
||||
+++ /*---comment--- /* +++[ref]
|
||||
|
||||
+++ <!-- Comment +++[ref]
|
||||
ft=html,xml
|
||||
|
||||
+++ html head <! +++[ref]
|
||||
|
||||
+++ /organizer node/ +++[ref]
|
||||
|
||||
+++ !warning mark +++[ref]
|
||||
|
||||
== Voomgrep tests ==[ref]
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
+++ n44 breakfast +++[ref]
|
||||
eggs
|
||||
bacon
|
||||
|
||||
+++ n45 lunch +++[ref]
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
+++ n46 dinner +++[ref]
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
+++ n47 snack +++[ref]
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
== sort tests ==[ref]
|
||||
|
||||
+++ node 2 +++[ref]
|
||||
|
||||
++++ dddd ++++[ref]
|
||||
d1
|
||||
|
||||
++++ eeee ++++[ref]
|
||||
|
||||
++++ dddd ++++[ref]
|
||||
d2
|
||||
|
||||
|
||||
++++ bbbb ++++[ref]
|
||||
b
|
||||
|
||||
+++++ b_yyy +++++[ref]
|
||||
|
||||
+++++ b_xxx +++++[ref]
|
||||
|
||||
++++ cccc ++++[ref]
|
||||
c
|
||||
|
||||
++++ aaaa ++++[ref]
|
||||
a
|
||||
+++++ a_nnn +++++[ref]
|
||||
|
||||
+++++ a_mmm +++++[ref]
|
||||
|
||||
+++ node 22 +++[ref]
|
||||
|
||||
|
||||
+++ ñ +++[ref]
|
||||
|
||||
+++ Ñ +++[ref]
|
||||
unicode tests
|
||||
|
||||
++++ э ++++[ref]
|
||||
1
|
||||
++++ Я ++++[ref]
|
||||
2
|
||||
++++ ю ++++[ref]
|
||||
3
|
||||
++++ Э ++++[ref]
|
||||
4
|
||||
++++ я ++++[ref]
|
||||
5
|
||||
++++ Ю ++++[ref]
|
||||
6
|
||||
|
||||
+++ node 1 +++[ref]
|
||||
|
||||
++++ bbbb ++++[ref]
|
||||
b
|
||||
|
||||
++++ dddd ++++[ref]
|
||||
d1
|
||||
|
||||
++++ DDDD ++++[ref]
|
||||
ingorecase test
|
||||
|
||||
++++ aaaa ++++[ref]
|
||||
a
|
||||
++++ dddd ++++[ref]
|
||||
d2
|
||||
|
||||
|
||||
++++ cccc ++++[ref]
|
||||
c
|
||||
|
||||
+++ z +++[ref]
|
||||
|
||||
== special chars tests ==[ref]
|
||||
|
||||
+++ '" /\\/ +++[ref]
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
+++ Брожу ли я +++[ref]
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
vim:fdm=marker:
|
||||
vim:foldtext=getline(v\:foldstart).'...'.(v\:foldend-v\:foldstart):
|
||||
|
||||
findme findme2
|
||||
|
||||
---1--- {{{1
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
---1.1--- {{{2
|
||||
1.1 body
|
||||
|
||||
---1.2--- {{{2
|
||||
1.2 body
|
||||
|
||||
---2--- {{{1
|
||||
2 body
|
||||
|
||||
---3--- {{{1o=
|
||||
3 body
|
||||
|
||||
---3.1--- {{{2x
|
||||
3.1 body
|
||||
|
||||
---3.2--- {{{2x
|
||||
3.2 body
|
||||
|
||||
---3.2.1--- {{{3
|
||||
3.2.1 body
|
||||
|
||||
---3.2.1.1--- {{{4
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
---3.2.2--- {{{3
|
||||
3.2.2 body
|
||||
|
||||
---3.2.2.1--- {{{4x
|
||||
3.2.2.1 body
|
||||
|
||||
---3.2.2.1.1--- {{{5x
|
||||
3.2.2.1.1 body
|
||||
|
||||
---3.2.2.1.2.1--- {{{6
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
---3.2.2.1.2.1.1--- {{{7x
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
---3.3--- {{{2
|
||||
3.3 body
|
||||
|
||||
---4--- {{{1
|
||||
4 body
|
||||
|
||||
---4.1--- {{{2
|
||||
4.1 body findme
|
||||
|
||||
---5--- {{{1o
|
||||
5 body
|
||||
|
||||
---5.1--- {{{2
|
||||
5.1 body
|
||||
|
||||
---5.2--- {{{2o
|
||||
5.2 body
|
||||
|
||||
---5.2.1--- {{{3
|
||||
5.2.1 body
|
||||
|
||||
---5.2.2--- {{{3
|
||||
5.2.2 body
|
||||
|
||||
---5.2.2.1--- {{{4o
|
||||
5.2.2.1 body
|
||||
|
||||
---5.2.2.1.1--- {{{5
|
||||
5.2.2.1.1 body
|
||||
|
||||
---5.2.2.1.2--- {{{5
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
---5.2.3--- {{{3
|
||||
5.2.3 body
|
||||
|
||||
--- AA --- {{{2
|
||||
a a a a
|
||||
|
||||
--- AA.1 --- {{{3
|
||||
a1 a1 a1 a1
|
||||
|
||||
--- BB --- {{{2
|
||||
b b b b
|
||||
|
||||
--- BB.1 --- {{{3
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
---5.3--- {{{2
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
---tests--- {{{1o
|
||||
|
||||
--- syntax tests --- {{{2
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
//---TODO comment--- //{{{3
|
||||
|
||||
"---comment--- "{{{3
|
||||
echo 'vim ok'
|
||||
|
||||
#---comment--- #{{{3
|
||||
print 'py ok'
|
||||
|
||||
%---comment--- %{{{3
|
||||
|
||||
/*---comment--- /*{{{3*/
|
||||
|
||||
<!-- Comment {{{3 -->
|
||||
ft=html,xml
|
||||
|
||||
html head <!--{{{3-->
|
||||
|
||||
--- /organizer node/ --- {{{3
|
||||
|
||||
--- !warning mark --- {{{3
|
||||
|
||||
--- Voomgrep tests--- {{{2
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
--- n44 breakfast --- {{{3
|
||||
eggs
|
||||
bacon
|
||||
|
||||
--- n45 lunch --- {{{3
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
--- n46 dinner --- {{{3
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
--- n47 snack --- {{{3
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
--- sort tests --- {{{2
|
||||
|
||||
--- node 2 --- {{{3
|
||||
|
||||
--- dddd --- {{{4x
|
||||
d1
|
||||
|
||||
--- eeee --- {{{4
|
||||
|
||||
--- dddd --- {{{4
|
||||
d2
|
||||
|
||||
|
||||
--- bbbb --- {{{4o
|
||||
b
|
||||
|
||||
--- b_yyy --- {{{5
|
||||
|
||||
--- b_xxx --- {{{5
|
||||
|
||||
--- cccc --- {{{4
|
||||
c
|
||||
|
||||
--- aaaa --- {{{4
|
||||
a
|
||||
--- a_nnn --- {{{5
|
||||
|
||||
--- a_mmm --- {{{5
|
||||
|
||||
--- node 22 --- {{{3
|
||||
|
||||
|
||||
--- ñ --- {{{3
|
||||
|
||||
--- Ñ --- {{{3
|
||||
unicode tests
|
||||
|
||||
--- э --- {{{4
|
||||
1
|
||||
--- Я --- {{{4
|
||||
2
|
||||
--- ю --- {{{4
|
||||
3
|
||||
--- Э --- {{{4
|
||||
4
|
||||
--- я --- {{{4
|
||||
5
|
||||
--- Ю --- {{{4
|
||||
6
|
||||
|
||||
--- node 1 --- {{{3
|
||||
|
||||
--- bbbb --- {{{4
|
||||
b
|
||||
|
||||
--- dddd --- {{{4
|
||||
d1
|
||||
|
||||
--- DDDD --- {{{4
|
||||
ingorecase test
|
||||
|
||||
--- aaaa --- {{{4
|
||||
a
|
||||
--- dddd --- {{{4
|
||||
d2
|
||||
|
||||
|
||||
--- cccc --- {{{4
|
||||
c
|
||||
|
||||
--- z --- {{{3
|
||||
|
||||
--- special chars tests --- {{{2
|
||||
|
||||
--- '" /\\/ --- {{{3 '" /\\/
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
--- Брожу ли я {{{3 вдоль улиц шумных? (utf-8)
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
:Voom vimwiki
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
|
||||
findme findme2
|
||||
|
||||
= 1 =
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
== 1.1 ==
|
||||
1.1 body
|
||||
|
||||
== 1.2 ==
|
||||
1.2 body
|
||||
|
||||
= 2 =
|
||||
2 body
|
||||
|
||||
= 3 =
|
||||
3 body
|
||||
|
||||
== 3.1 ==
|
||||
3.1 body
|
||||
|
||||
== 3.2 ==
|
||||
3.2 body
|
||||
|
||||
=== 3.2.1 ===
|
||||
3.2.1 body
|
||||
|
||||
==== 3.2.1.1 ====
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
=== 3.2.2 ===
|
||||
3.2.2 body
|
||||
|
||||
==== 3.2.2.1 ====
|
||||
3.2.2.1 body
|
||||
|
||||
===== 3.2.2.1.1 =====
|
||||
3.2.2.1.1 body
|
||||
|
||||
====== 3.2.2.1.2.1 ======
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
======= 3.2.2.1.2.1.1 =======
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
== 3.3 ==
|
||||
3.3 body
|
||||
|
||||
= 4 =
|
||||
4 body
|
||||
|
||||
== 4.1 ==
|
||||
4.1 body findme
|
||||
|
||||
= 5 =
|
||||
5 body
|
||||
|
||||
== 5.1 ==
|
||||
5.1 body
|
||||
|
||||
== 5.2 ==
|
||||
5.2 body
|
||||
|
||||
=== 5.2.1 ===
|
||||
5.2.1 body
|
||||
|
||||
=== 5.2.2 ===
|
||||
5.2.2 body
|
||||
|
||||
==== 5.2.2.1 ====
|
||||
5.2.2.1 body
|
||||
|
||||
===== 5.2.2.1.1 =====
|
||||
5.2.2.1.1 body
|
||||
|
||||
===== 5.2.2.1.2 =====
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
=== 5.2.3 ===
|
||||
5.2.3 body
|
||||
|
||||
== AA ==
|
||||
a a a a
|
||||
|
||||
=== AA.1 ===
|
||||
a1 a1 a1 a1
|
||||
|
||||
== BB ==
|
||||
b b b b
|
||||
|
||||
=== BB.1 ===
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
== 5.3 ==
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
= tests =
|
||||
|
||||
== syntax tests ==
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
=== //---TODO comment--- // ===
|
||||
|
||||
=== "---comment--- " ===
|
||||
echo 'vim ok'
|
||||
|
||||
=== #---comment--- # ===
|
||||
print 'py ok'
|
||||
|
||||
=== %---comment--- % ===
|
||||
|
||||
=== /*---comment--- /* ===
|
||||
|
||||
=== <!-- Comment ===
|
||||
ft=html,xml
|
||||
|
||||
=== html head <! ===
|
||||
|
||||
=== /organizer node/ ===
|
||||
|
||||
=== !warning mark ===
|
||||
|
||||
== Voomgrep tests ==
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
=== n44 breakfast ===
|
||||
eggs
|
||||
bacon
|
||||
|
||||
=== n45 lunch ===
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
=== n46 dinner ===
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
=== n47 snack ===
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
== sort tests ==
|
||||
|
||||
=== node 2 ===
|
||||
|
||||
==== dddd ====
|
||||
d1
|
||||
|
||||
==== eeee ====
|
||||
|
||||
==== dddd ====
|
||||
d2
|
||||
|
||||
|
||||
==== bbbb ====
|
||||
b
|
||||
|
||||
===== b_yyy =====
|
||||
|
||||
===== b_xxx =====
|
||||
|
||||
==== cccc ====
|
||||
c
|
||||
|
||||
==== aaaa ====
|
||||
a
|
||||
===== a_nnn =====
|
||||
|
||||
===== a_mmm =====
|
||||
|
||||
=== node 22 ===
|
||||
|
||||
|
||||
=== ñ ===
|
||||
|
||||
=== Ñ ===
|
||||
unicode tests
|
||||
|
||||
==== э ====
|
||||
1
|
||||
==== Я ====
|
||||
2
|
||||
==== ю ====
|
||||
3
|
||||
==== Э ====
|
||||
4
|
||||
==== я ====
|
||||
5
|
||||
==== Ю ====
|
||||
6
|
||||
|
||||
=== node 1 ===
|
||||
|
||||
==== bbbb ====
|
||||
b
|
||||
|
||||
==== dddd ====
|
||||
d1
|
||||
|
||||
==== DDDD ====
|
||||
ingorecase test
|
||||
|
||||
==== aaaa ====
|
||||
a
|
||||
==== dddd ====
|
||||
d2
|
||||
|
||||
|
||||
==== cccc ====
|
||||
c
|
||||
|
||||
=== z ===
|
||||
|
||||
== special chars tests ==
|
||||
|
||||
=== '" /\\/ ===
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
=== Брожу ли я ===
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,250 @@
|
|||
:Voom wiki
|
||||
This is VOoM markup mode test file. Converted from **test_outline.txt**.
|
||||
NOTE: MediaWiki format, with fold markers
|
||||
|
||||
findme findme2
|
||||
|
||||
= 1 = <!--{{{1-->
|
||||
1 body
|
||||
NEXT LINE IS FOR TESTS -- DO NOT MOVE OR EDIT
|
||||
VO.levels=[1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 4, 5, 6, 7, 2, 1, 2, 1, 2, 2, 3, 3, 4, 5, 5, 3, 2, 3, 2, 3, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 2, 3, 3]
|
||||
|
||||
|
||||
== 1.1 == <!--{{{2-->
|
||||
1.1 body
|
||||
|
||||
== 1.2 == <!--{{{2-->
|
||||
1.2 body
|
||||
|
||||
= 2 = <!--{{{1-->
|
||||
2 body
|
||||
|
||||
= 3 = <!--{{{1o=-->
|
||||
3 body
|
||||
|
||||
== 3.1 == <!--{{{2x-->
|
||||
3.1 body
|
||||
|
||||
== 3.2 == <!--{{{2x-->
|
||||
3.2 body
|
||||
|
||||
=== 3.2.1 === <!--{{{3-->
|
||||
3.2.1 body
|
||||
|
||||
==== 3.2.1.1 ==== <!--{{{4-->
|
||||
3.2.1.1 body
|
||||
xxxx findme findme
|
||||
|
||||
=== 3.2.2 === <!--{{{3-->
|
||||
3.2.2 body
|
||||
|
||||
==== 3.2.2.1 ==== <!--{{{4x-->
|
||||
3.2.2.1 body
|
||||
|
||||
===== 3.2.2.1.1 ===== <!--{{{5x-->
|
||||
3.2.2.1.1 body
|
||||
|
||||
====== 3.2.2.1.2.1 ====== <!--{{{6-->
|
||||
3.2.2.1.2.1 body
|
||||
|
||||
======= 3.2.2.1.2.1.1 ======= <!--{{{7x-->
|
||||
3.2.2.1.2.1.1 body
|
||||
|
||||
== 3.3 == <!--{{{2-->
|
||||
3.3 body
|
||||
|
||||
= 4 = <!--{{{1-->
|
||||
4 body
|
||||
|
||||
== 4.1 == <!--{{{2-->
|
||||
4.1 body findme
|
||||
|
||||
= 5 = <!--{{{1o-->
|
||||
5 body
|
||||
|
||||
== 5.1 == <!--{{{2-->
|
||||
5.1 body
|
||||
|
||||
== 5.2 == <!--{{{2o-->
|
||||
5.2 body
|
||||
|
||||
=== 5.2.1 === <!--{{{3-->
|
||||
5.2.1 body
|
||||
|
||||
=== 5.2.2 === <!--{{{3-->
|
||||
5.2.2 body
|
||||
|
||||
==== 5.2.2.1 ==== <!--{{{4o-->
|
||||
5.2.2.1 body
|
||||
|
||||
===== 5.2.2.1.1 ===== <!--{{{5-->
|
||||
5.2.2.1.1 body
|
||||
|
||||
===== 5.2.2.1.2 ===== <!--{{{5-->
|
||||
5.2.2.1.2 body
|
||||
|
||||
|
||||
=== 5.2.3 === <!--{{{3-->
|
||||
5.2.3 body
|
||||
|
||||
== AA == <!--{{{2-->
|
||||
a a a a
|
||||
|
||||
=== AA.1 === <!--{{{3-->
|
||||
a1 a1 a1 a1
|
||||
|
||||
== BB == <!--{{{2-->
|
||||
b b b b
|
||||
|
||||
=== BB.1 === <!--{{{3-->
|
||||
b1 b1 b1 b1 b1
|
||||
|
||||
== 5.3 == <!--{{{2-->
|
||||
5.3 body
|
||||
findme
|
||||
|
||||
= tests = <!--{{{1o-->
|
||||
|
||||
== syntax tests == <!--{{{2-->
|
||||
Since v2.1 comment chars before foldmarker are stripped according to filetype.
|
||||
Some Body filetypes have their own Tree syntax hi.
|
||||
|
||||
|
||||
=== //---TODO comment--- // === <!--{{{3-->
|
||||
|
||||
=== "---comment--- " === <!--{{{3-->
|
||||
echo 'vim ok'
|
||||
|
||||
=== #---comment--- # === <!--{{{3-->
|
||||
print 'py ok'
|
||||
|
||||
=== %---comment--- % === <!--{{{3-->
|
||||
|
||||
=== /*---comment--- /* === <!--{{{3*/-->
|
||||
|
||||
=== <!-- Comment === <!--{{{3 -->-->
|
||||
ft=html,xml
|
||||
|
||||
=== html head <! === <!--{{{3-->-->
|
||||
|
||||
=== /organizer node/ === <!--{{{3-->
|
||||
|
||||
=== !warning mark === <!--{{{3-->
|
||||
|
||||
== Voomgrep tests == <!--{{{2-->
|
||||
:Voomg Spam and ham not bacon
|
||||
:Voomg Spam and\ ham not\ bacon
|
||||
:Voomg Spam and\\ ham not\\ bacon
|
||||
\Spam// ' "
|
||||
|
||||
=== n44 breakfast === <!--{{{3-->
|
||||
eggs
|
||||
bacon
|
||||
|
||||
=== n45 lunch === <!--{{{3-->
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
Spam Spam Spam Spam Spam Spam Spam Spam Spam
|
||||
ham
|
||||
|
||||
=== n46 dinner === <!--{{{3-->
|
||||
eggs
|
||||
Spam
|
||||
ham
|
||||
|
||||
=== n47 snack === <!--{{{3-->
|
||||
bacon
|
||||
spam
|
||||
HAM
|
||||
beef
|
||||
|
||||
== sort tests == <!--{{{2-->
|
||||
|
||||
=== node 2 === <!--{{{3-->
|
||||
|
||||
==== dddd ==== <!--{{{4x-->
|
||||
d1
|
||||
|
||||
==== eeee ==== <!--{{{4-->
|
||||
|
||||
==== dddd ==== <!--{{{4-->
|
||||
d2
|
||||
|
||||
|
||||
==== bbbb ==== <!--{{{4o-->
|
||||
b
|
||||
|
||||
===== b_yyy ===== <!--{{{5-->
|
||||
|
||||
===== b_xxx ===== <!--{{{5-->
|
||||
|
||||
==== cccc ==== <!--{{{4-->
|
||||
c
|
||||
|
||||
==== aaaa ==== <!--{{{4-->
|
||||
a
|
||||
===== a_nnn ===== <!--{{{5-->
|
||||
|
||||
===== a_mmm ===== <!--{{{5-->
|
||||
|
||||
=== node 22 === <!--{{{3-->
|
||||
|
||||
|
||||
=== ñ === <!--{{{3-->
|
||||
|
||||
=== Ñ === <!--{{{3-->
|
||||
unicode tests
|
||||
|
||||
==== э ==== <!--{{{4-->
|
||||
1
|
||||
==== Я ==== <!--{{{4-->
|
||||
2
|
||||
==== ю ==== <!--{{{4-->
|
||||
3
|
||||
==== Э ==== <!--{{{4-->
|
||||
4
|
||||
==== я ==== <!--{{{4-->
|
||||
5
|
||||
==== Ю ==== <!--{{{4-->
|
||||
6
|
||||
|
||||
=== node 1 === <!--{{{3-->
|
||||
|
||||
==== bbbb ==== <!--{{{4-->
|
||||
b
|
||||
|
||||
==== dddd ==== <!--{{{4-->
|
||||
d1
|
||||
|
||||
==== DDDD ==== <!--{{{4-->
|
||||
ingorecase test
|
||||
|
||||
==== aaaa ==== <!--{{{4-->
|
||||
a
|
||||
==== dddd ==== <!--{{{4-->
|
||||
d2
|
||||
|
||||
|
||||
==== cccc ==== <!--{{{4-->
|
||||
c
|
||||
|
||||
=== z === <!--{{{3-->
|
||||
|
||||
== special chars tests == <!--{{{2-->
|
||||
|
||||
=== '" /\\/ === <!--{{{3 '" /\\/-->
|
||||
" "" """
|
||||
' '' """
|
||||
\ \\ \\\
|
||||
/ // ///
|
||||
\//\
|
||||
|
||||
=== Брожу ли я === <!--{{{3 вдоль улиц шумных? (utf-8)-->
|
||||
Брожу. Чего ж не побродить.
|
||||
|
||||
Чебурашка CHeburashka
|
||||
u'\u0427\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430'
|
||||
utf-8
|
||||
'\xd0\xa7\xd0\xb5\xd0\xb1\xd1\x83\xd1\x80\xd0\xb0\xd1\x88\xd0\xba\xd0\xb0'
|
||||
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
Installation instructions for VimOrganizer v. 0.30, November 2011
|
||||
=================================================================
|
||||
|
||||
1. Install VimOrganizer files as you would any other ftplugin, with downloaded
|
||||
files going in their respective directories under your .vim (Linux/Mac)
|
||||
or vimfiles (Windows) directory.
|
||||
|
||||
2. Run helptags on the help file in the /doc directory, vimorg.txt,
|
||||
so hep items can be accessed using the Vim help system.
|
||||
|
||||
3. Make sure your vimrc has these lines:
|
||||
-------------------------------------
|
||||
filetype plugin indent on
|
||||
|
||||
[...and then somewhere below that:]
|
||||
|
||||
au! BufRead,BufWrite,BufWritePost,BufNewFile *.org
|
||||
au BufEnter *.org call org#SetOrgFileType()
|
||||
------------------------------------
|
||||
|
||||
If you use VimOrganizer much you will also want to configure variables
|
||||
and/or functions in your vimrc. A sample vimrc has been included
|
||||
in the download.
|
||||
|
||||
ALSO, you will want to install the plugins listed below. VimOrganizer
|
||||
will work without them, but some functionality will be unavailable:
|
||||
|
||||
4. Make sure you have Calendar.vim installed.
|
||||
(Calendar.vim comes included in the /plugin/ directory as part of
|
||||
the Vim runtime in some Vim installs, otherwise available at:
|
||||
http://www.vim.org/scripts/script.php?script_id=52)
|
||||
|
||||
Second, here are two plugins that you will want to download to
|
||||
take advantage of Org-mode-like narrowing and link features that have been built
|
||||
into VimOrganizer:
|
||||
|
||||
5. Christian Brabandt's NarrowRegion plugin. Find and install it from here:
|
||||
http://www.vim.org/scripts/script.php?script_id=3075
|
||||
6. The Utl "Universal Text Linking" plugin. Find and install it from here:
|
||||
http://www.vim.org/scripts/script.php?script_id=293
|
||||
|
||||
If you are running on Windows another plugin will be useful:
|
||||
|
||||
7. If you're running on Windows then you may want to get Peter Rodding's
|
||||
shell.vim plugin. It's not necessary, but if you have installed
|
||||
it VimOrganizer will use it to ensure that you don't see
|
||||
the annoying Windows command prompt window pop up when VimOrganizer
|
||||
calls out to Emacs/Org-mode.
|
||||
http://www.vim.org/scripts/script.php?script_id=3123
|
||||
|
||||
8. FINALLY, install Emacs. Not necessary for basic outlining, agenda
|
||||
searches, and other basic stuff, but it is necessary to do exports
|
||||
to html and PDF (which you will definitely want) as well as other
|
||||
advanced stuff. Don't be afraid, install is simply and configuration
|
||||
is not hard. Find Emacs here:
|
||||
http://www.gnu.org/software/emacs/
|
||||
|
||||
Vimorg uses a variable, g:org_command_for_emacsclient, to hold the
|
||||
command that will start the emacsclient on your system. If you are
|
||||
not on Linux or OSX you will need to set this explicitly in your
|
||||
vimrc file.
|
||||
|
||||
Also, please note that emacsclient works slightly differently on
|
||||
Windows and Linux/OSX systems. You must manually start
|
||||
Emacs on Linux/OSX or calls to emacsclient will not work. Please see
|
||||
:h vimorg-emacs-setup
|
||||
|
||||
For Emacs you should also install a hook function in the .emacs file,
|
||||
which will automatically make minor conversions when you export and/or
|
||||
open a VimOrganizer .org file in Emacs. You can find the text for that
|
||||
function in the VimOrganizer help file:
|
||||
:h vimorg-orgmode-conversion
|
||||
|
||||
If you're scared of Emacs, don't worry. You don't ever need to edit
|
||||
a document using Emacs. The most you will need to do is open up
|
||||
the .emacs configuration file (in Vim) to make some configuration
|
||||
changes, and that is required only if you're doing more advanced stuff.
|
||||
Having said, that, if there are problems it can sometimes be easiest to
|
||||
open Emacs and diagnose an issue there. Still, you don't ever need
|
||||
to edit a document in Emacs, just think of Emacs as your "application
|
||||
server".
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
* VimOrganizer CheatSheet
|
||||
** Outline Navigation
|
||||
TAB cycle visibilty of single headline/subtree
|
||||
|
||||
Shift-TAB cycle visibility of entire outline
|
||||
|
||||
,1 show level 1 heads only
|
||||
|
||||
,2 show up to level 2 headings
|
||||
|
||||
...
|
||||
|
||||
,,3 show up to level 3 heads for current heading only
|
||||
|
||||
,,5 show up to level 5 heads for current heading only
|
||||
. . .
|
||||
** Basic Outline Editing
|
||||
Name your file with a '.org' extension and then just start adding
|
||||
headings with asterisk to indicate heading level. NOTE: asterisks must
|
||||
be in the leftmost column and must be separate from heading text by a
|
||||
space. This document is an example showing headings, subheadings,
|
||||
and text underneath each.
|
||||
*** Adding new headlines
|
||||
**** Enter, shift+Enter
|
||||
add another headline of same level
|
||||
<enter> works only in normal mode
|
||||
**** Ctrl+Enter
|
||||
add another headline of lower-level
|
||||
**** Ctrl+Shift+Enter
|
||||
add another headline of higher-level
|
||||
** Time Stamps/Date-time prompt
|
||||
The following commands may be issued anywhere within a headline and will
|
||||
enter or edit the corresponding date for the headline. One date of
|
||||
each type may be defined per headline (i.e, 'deadline', 'scheduled',
|
||||
'closed', and 'regular'. You can enter more dates anywhere you want, but
|
||||
this editing mechanism is currently restricted to dealing with only these
|
||||
"primary" dates.
|
||||
|
||||
enter DEADLINE date for headline ,dd
|
||||
enter SCHEDULED date for headline ,ds
|
||||
enter CLOSED date for headline ,dc
|
||||
enter regular date TIMESTAMP (i.e., no indicator) for headline
|
||||
,dt
|
||||
enter timestamp into text ,dg
|
||||
|
||||
The command-line prompt and calendar that appear when you enter a ,d<x>
|
||||
command operate nearly the same as the date-time prompt in Emacs'
|
||||
Org-mode. A few options are not yet implemented (e.g., the 'w'eek
|
||||
options), but most should work just the same. For excellent documentation
|
||||
on Org-mode's date-time prompt see:
|
||||
:http://orgmode.org/manual/The-date_002ftime-prompt.html#The-date_002ftime-prompt
|
||||
** Agenda Dashboard
|
||||
Type ,ag to bring up the Agenda Dashboard, which allows you to launch
|
||||
some searches.
|
||||
** Set Agenda Files
|
||||
Agenda files are held in a list: g:agenda_files. You can enter values for
|
||||
g:agenda_files in your vimrc, e.g.,
|
||||
|
||||
:let g:agenda_files = ['myfile.org','c:/path/myfile.org']
|
||||
|
||||
You can also use Vimscript to assign multiple files at a time to
|
||||
g:agenda_files. For example, putting the line below in your vimrc would
|
||||
put all .org files in the org_files directory into g:agenda_files:
|
||||
|
||||
:let g:agenda_files = split(glob("~\desktop\org_files\*.org"),"\n")
|
||||
|
||||
User Interface for runtime editing of g:agenda_files:
|
||||
|
||||
There is a also a bare-bones agenda-editing mechanism that works like this:
|
||||
(1) Put your .org working directories in list g:agenda_dirs. Mine is in my
|
||||
vimrc and looks like this:
|
||||
|
||||
:let g:agenda_dirs=["c:/users/herbert/documents/my\ dropbox","c:/users/herbert/desktop/org_Files"]
|
||||
|
||||
(2) Then to edit your agenda files issue this command
|
||||
|
||||
:call EditAgendaFiles()
|
||||
|
||||
This will open a new tab and show your current agenda files along with a list
|
||||
of all org files in your agenda dirs. Simply copy or move lines from the
|
||||
agenda dirs list to the top and when done press :W (that's a capital 'W').
|
||||
Order of agenda files is sometimes important, e.g., it is used when ordering
|
||||
some agenda results.
|
||||
|
||||
** Tags
|
||||
Tags for a file are defined using the SetupTags(<tag-setup-string>) function. There is an
|
||||
example in the project's vimrc file. General structure of the
|
||||
tag-setup-string is: (1) tags followed by the single-key access in parens,
|
||||
(2) brackets (i.e., {} ) around sets of tags that are mutually exclusive.
|
||||
For now you must place the single-key-access parens with character after the
|
||||
tag, no letter is automatically assigned. The tags set up by SetupTags() are
|
||||
used in the menu accessed by ,et .
|
||||
|
||||
edit tags -- ,et
|
||||
view items with tag in agenda -- double-click tag,
|
||||
|
||||
(Note: The 'RunSearch' searches below can all be entered now
|
||||
by accessing Agenda Dashboard (,ag) and pressing 'm')
|
||||
view entries having both tag1 and tag2:
|
||||
:call RunSearch('+tag1+tag2')
|
||||
view entries having tag1 but not tag2:
|
||||
:call RunSearch('+tag1-tag2')
|
||||
view entries having tag1 or tag2:
|
||||
:call RunSearch('+tag1|tag2')
|
||||
view entries having tag1 that are also TODO:
|
||||
:call RunSearch('+TODO+tag1')
|
||||
view entries having tag1 that are also DONE:
|
||||
:call RunSearch('+DONE+tag1')
|
||||
view entries having tag1 that have any todo:
|
||||
:call RunSearch('+ANY_TODO+tag1')
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
" This is an example vimrc that should work for testing purposes.
|
||||
" Integrate the VimOrganizer specific sections into your own
|
||||
" vimrc if you wish to use VimOrganizer on a regular basis. . .
|
||||
|
||||
"===================================================================
|
||||
" THE NECESSARY STUFF"
|
||||
" THe three lines below are necessary for VimOrganizer to work right
|
||||
" =================================================================
|
||||
filetype plugin indent on
|
||||
" and then put these lines in vimrc somewhere after the line above
|
||||
au! BufRead,BufWrite,BufWritePost,BufNewFile *.org
|
||||
au BufEnter *.org call org#SetOrgFileType()
|
||||
|
||||
"==============================================================
|
||||
" THE UNNECESSARY STUFF"
|
||||
"=============================================================
|
||||
" Everything below here is a customization. None are needed.
|
||||
"============================================================
|
||||
|
||||
" vars below are used to define default Todo list and
|
||||
" default Tag list. Both of these can also be defined
|
||||
" on a document-specific basis by config lines in a file.
|
||||
" See :h vimorg-todo-metadata and/or :h vimorg-tag-metadata
|
||||
" 'TODO | DONE' is the default,so not really necessary to define it at all
|
||||
let g:org_todo_setup='TODO | DONE'
|
||||
" OR, e.g.,:
|
||||
"let g:org_todo_setup='TODO NEXT STARTED | DONE CANCELED'
|
||||
|
||||
" include a tags setup string if you want:
|
||||
let g:org_tags_alist='{@home(h) @work(w) @tennisclub(t)} {easy(e) hard(d)} {computer(c) phone(p)}'
|
||||
"
|
||||
" g:org_agenda_dirs specify directories that, along with
|
||||
" their subtrees, are searched for list of .org files when
|
||||
" accessing EditAgendaFiles(). Specify your own here, otherwise
|
||||
" default will be for g:org_agenda_dirs to hold single
|
||||
" directory which is directory of the first .org file opened
|
||||
" in current Vim instance:
|
||||
" Below is line I use in my Windows install:
|
||||
" NOTE: case sensitive even on windows.
|
||||
let g:org_agenda_select_dirs=["~/desktop/org_files"]
|
||||
let g:agenda_files = split(glob("~/desktop/org_files/org-mod*.org"),"\n")
|
||||
|
||||
" ---------------------
|
||||
" Emacs setup
|
||||
" --------------------
|
||||
" To use Emacs you will need to define the client. On
|
||||
" Linux/OSX this is typically simple, just:
|
||||
"let g:org_command_for_emacsclient = 'emacsclient'
|
||||
"
|
||||
"On Windows it is more complicated, and probably involves creating
|
||||
" a 'soft link' to the emacsclient executable (which is 'emacsclientw')
|
||||
" See :h vimorg-emacs-setup
|
||||
"let g:org_command_for_emacsclient = 'c:\users\herbert\emacsclientw.exe'
|
||||
|
||||
" ---------------------
|
||||
" Custom Agenda Searches
|
||||
" --------------------
|
||||
" the assignment to g:org_custom_searches below defines searches that a
|
||||
" a user can then easily access from the Org menu or the Agenda Dashboard.
|
||||
" (Still need to add help on how to define them, assignment below
|
||||
" is hopefully illustrative for now. . . . )
|
||||
let g:org_custom_searches = [
|
||||
\ { 'name':"Next week's agenda", 'type':'agenda',
|
||||
\ 'agenda_date':'+1w','agenda_duration':'w'}
|
||||
\, { 'name':"Next week's TODOS", 'type':'agenda',
|
||||
\ 'agenda_date':'+1w','agenda_duration':'w','spec':'+UNFINISHED_TODOS'}
|
||||
\, { 'name':'Home tags', 'type':'heading_list', 'spec':'+HOME'}
|
||||
\, { 'name':'Home tags', 'type':'sparse_tree', 'spec':'+HOME'}
|
||||
\ ]
|
||||
|
||||
" --------------------------------
|
||||
" Custom colors
|
||||
" --------------------------------"
|
||||
" OrgCustomColors() allows a user to set highlighting for particular items
|
||||
function! OrgCustomColors()
|
||||
" various text item "highlightings" are below
|
||||
" these are the defaults. Uncomment and change a line if you
|
||||
" want different highlighting for the element
|
||||
"
|
||||
" below are defaults for any TODOS you define. TODOS that
|
||||
" come before the | in a definition will use 'NOTDONETODO'
|
||||
" and those that come after are DONETODO
|
||||
"hi! DONETODO guifg=green ctermfg=green
|
||||
"hi! NOTDONETODO guifg=red ctermfg=lightred
|
||||
|
||||
" heading level highlighting is done in pairs, one for the
|
||||
" heading when unfoled and one for folded. Default is to make
|
||||
" them the same except for the folded version being bold:
|
||||
" assign OL1 pair for level 1, OL2 pair for level 2, etc.
|
||||
"hi! OL1 guifg=somecolor guibg=somecolor
|
||||
"hi! OL1Folded guifg=somecolor guibg=somecolor gui=bold
|
||||
|
||||
|
||||
" tags are lines below headings that have :colon:separated:tags:
|
||||
"hi! Org_Tag guifg=lightgreen ctermfg=blue
|
||||
|
||||
" lines that begin with '#+' in column 0 are config lines
|
||||
"hi! Org_Config_Line guifg=darkgray ctermfg=magenta
|
||||
|
||||
"drawers are :PROPERTIES: and :LOGBOOK: lines and their associated
|
||||
" :END: lines
|
||||
"hi! Org_Drawer guifg=pink ctermfg=magenta
|
||||
"hi! Org_Drawer_Folded guifg=pink ctermfg=magenta gui=bold cterm=bold
|
||||
|
||||
" this applies to value names in :PROPERTIES: blocks
|
||||
"hi! Org_Property_Value guifg=pink ctermfg=magenta
|
||||
|
||||
" three lines below apply to different kinds of blocks
|
||||
"hi! Org_Block guifg=#555555 ctermfg=magenta
|
||||
"hi! Org_Src_Block guifg=#555555 ctermfg=magenta
|
||||
"hi! Org_Table guifg=#888888 guibg=#333333 ctermfg=magenta
|
||||
|
||||
" dates are date specs between angle brackets (<>) or square brackets ([])
|
||||
"hi! Org_Date guifg=magenta ctermfg=magenta gui=underline cterm=underline
|
||||
|
||||
" Org_Star is used to "hide" initial asterisks in a heading
|
||||
"hi! Org_Star guifg=#444444 ctermfg=darkgray
|
||||
|
||||
"hi! Props guifg=#ffa0a0 ctermfg=gray
|
||||
|
||||
" bold, itals, underline, and code are highlights applied
|
||||
" to character formatting
|
||||
"hi! Org_Code guifg=darkgray gui=bold ctermfg=14
|
||||
"hi! Org_Itals gui=italic guifg=#aaaaaa ctermfg=lightgray
|
||||
"hi! Org_Bold gui=bold guifg=#aaaaaa ctermfg=lightgray
|
||||
"hi! Org_Underline gui=underline guifg=#aaaaaa ctermfg=lightgray
|
||||
"hi! Org_Lnumber guifg=#999999 ctermfg=gray
|
||||
|
||||
" these lines apply to links: [[link]], and [[link][link desc]]
|
||||
"if has("conceal")
|
||||
" hi! default linkends guifg=blue ctermfg=blue
|
||||
"endif
|
||||
"hi! Org_Full_Link guifg=cyan gui=underline ctermfg=lightblue cterm=underline
|
||||
"hi! Org_Half_Link guifg=cyan gui=underline ctermfg=lightblue cterm=underline
|
||||
|
||||
" applies to the Heading line that can be displayed in column view
|
||||
"highlight OrgColumnHeadings guibg=#444444 guifg=#aaaaaa gui=underline
|
||||
|
||||
" Use g:org_todo_custom_highlights to set up highlighting for individual
|
||||
" TODO items. Without this all todos that designate an uninished state
|
||||
" will be highlighted using NOTDONETODO highlight (see above)
|
||||
" and all todos that designate a finished state will be highlighted using
|
||||
" the DONETODO highlight (see above).
|
||||
let g:org_todo_custom_highlights =
|
||||
\ { 'NEXT': { 'guifg':'#888888', 'guibg':'#222222',
|
||||
\ 'ctermfg':'gray', 'ctermbg':'darkgray'},
|
||||
\ 'WAITING': { 'guifg':'#aa3388',
|
||||
\ 'ctermfg':'red' } }
|
||||
|
||||
endfunction
|
||||
|
||||
" below are two examples of Org-mode "hook" functions
|
||||
" These present opportunities for end-user customization
|
||||
" of how VimOrganizer works. For more info see the
|
||||
" documentation for hooks in Emacs' Org-mode documentation:
|
||||
" http://orgmode.org/worg/org-configs/org-hooks.php#sec-1_40
|
||||
"
|
||||
" These two hooks are currently the only ones enabled in
|
||||
" the VimOrganizer codebase, but they are easy to add so if
|
||||
" there's a particular hook you want go ahead and request it
|
||||
" or look for where these hooks are implemented in
|
||||
" /ftplugin/org.vim and use them as example for placing your
|
||||
" own hooks in VimOrganizer:
|
||||
function! Org_property_changed_functions(line,key, val)
|
||||
"call confirm("prop changed: ".a:line."--key:".a:key." val:".a:val)
|
||||
endfunction
|
||||
function! Org_after_todo_state_change_hook(line,state1, state2)
|
||||
"call confirm("changed: ".a:line."--key:".a:state1." val:".a:state2)
|
||||
"call OrgConfirmDrawer("LOGBOOK")
|
||||
"let str = ": - State: " . org#Pad(a:state2,10) . " from: " . Pad(a:state1,10) .
|
||||
" \ ' [' . org#Timestamp() . ']'
|
||||
"call append(line("."), repeat(' ',len(matchstr(getline(line(".")),'^\s*'))) . str)
|
||||
endfunction
|
||||
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
" calutil.vim: some calendar utilities
|
||||
" Author: Charles E. Campbell, Jr.
|
||||
" with modifications by Herbert Sitz for VimOrganizer
|
||||
" Date: Oct 08, 2008
|
||||
" Version: 3b ASTRO-ONLY
|
||||
" ---------------------------------------------------------------------
|
||||
if exists("loaded_calutil")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_calutil= "v3b"
|
||||
if v:version < 700
|
||||
echohl WarningMsg
|
||||
echo "***warning*** this version of calutil needs vim 7.0"
|
||||
echohl Normal
|
||||
finish
|
||||
endif
|
||||
|
||||
function! calutil#dayname(date)
|
||||
return calutil#DayOfWeek(split(a:date,'-')[0],split(a:date,'-')[1],split(a:date,'-')[2],2)
|
||||
endfunction
|
||||
function! calutil#dow(date)
|
||||
return calutil#DayOfWeek(split(a:date,'-')[0],split(a:date,'-')[1],split(a:date,'-')[2],1)
|
||||
endfunction
|
||||
|
||||
function! calutil#jul(date)
|
||||
return calutil#Cal2Jul(split(a:date,'-')[0],split(a:date,'-')[1],split(a:date,'-')[2])
|
||||
endfunction
|
||||
|
||||
function! calutil#cal(julian)
|
||||
return calutil#Jul2Cal(a:julian)
|
||||
endfunction
|
||||
" ---------------------------------------------------------------------
|
||||
" DayOfWeek: {{{1
|
||||
" Usage : call calutil#DayOfWeek(y,m,d,[0|1|2])
|
||||
" g:CalUtilDayOfWeek: if 0-> integer (default)
|
||||
" 1-> 3-letter English abbreviation for name of day
|
||||
" 2-> English name of day
|
||||
" Returns
|
||||
" g:CalUtilDayOfWeek
|
||||
" ---------
|
||||
" 1 : 0 1 2 3 4 5 6
|
||||
" 2 : Mon Tue Wed Thu Fri Sat Sun
|
||||
" 3 : Monday Tuesday Wednesday Thursday Friday Saturday Sunday
|
||||
fun! calutil#DayOfWeek(y,m,d,...)
|
||||
if a:0 > 0
|
||||
let g:CalUtilDayOfWeek= a:1
|
||||
endif
|
||||
|
||||
let z = calutil#Cal2Jul(a:y,a:m,a:d)
|
||||
if z >= 0
|
||||
let z= z%7
|
||||
else
|
||||
let z= 7 - (-z%7)
|
||||
endif
|
||||
|
||||
if exists("g:CalUtilDayOfWeek")
|
||||
if g:CalUtilDayOfWeek == 2
|
||||
let dow0="Mon"
|
||||
let dow1="Tue"
|
||||
let dow2="Wed"
|
||||
let dow3="Thu"
|
||||
let dow4="Fri"
|
||||
let dow5="Sat"
|
||||
let dow6="Sun"
|
||||
return dow{z}
|
||||
elseif g:CalUtilDayOfWeek == 3
|
||||
let dow0="Monday"
|
||||
let dow1="Tuesday"
|
||||
let dow2="Wednesday"
|
||||
let dow3="Thursday"
|
||||
let dow4="Friday"
|
||||
let dow5="Saturday"
|
||||
let dow6="Sunday"
|
||||
return dow{z}
|
||||
endif
|
||||
endif
|
||||
return z
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" calutil#Cal2Jul: convert a (after 9/14/1752) Gregorian calendar date to Julian day {{{1
|
||||
" (on,before " ) Julian calendar date to Julian day
|
||||
" (proleptic)
|
||||
fun! calutil#Cal2Jul(y,m,d)
|
||||
let year = a:y
|
||||
let month= a:m
|
||||
let day = a:d
|
||||
|
||||
" there is no year zero
|
||||
if year == 0
|
||||
let year= -1
|
||||
elseif year < 0
|
||||
let year= year + 1
|
||||
endif
|
||||
|
||||
let julday= day - 32075 +
|
||||
\ 1461*(year + 4800 + (month - 14)/12)/4 +
|
||||
\ 367*(month - 2 - ((month - 14)/12)*12)/12 -
|
||||
\ 3*((year + 4900 + (month - 14)/12)/100)/4
|
||||
|
||||
" 2361221 == Sep 2, 1752, which was followed immediately by
|
||||
" Sep 14, 1752 (in England). Various countries
|
||||
" adopted the Gregorian calendar at different times.
|
||||
if julday <= 2361221
|
||||
let a = (14-month)/12
|
||||
let y = year + 4800 - a
|
||||
let m = month + 12*a - 3
|
||||
let julday = day + (153*m + 2)/5 + y*365 + y/4 - 32083
|
||||
endif
|
||||
return julday
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" calutil#Jul2Cal: convert a Julian day to a date: {{{1
|
||||
" Default year/month/day
|
||||
" julday,1 julday,"ymd" year/month/day
|
||||
" julday,2 julday,"mdy" month/day/year
|
||||
" julday,3 julday,"dmy" day/month/year
|
||||
fun! calutil#Jul2Cal(julday,...)
|
||||
let julday= a:julday
|
||||
|
||||
if julday <= 2361221
|
||||
" Proleptic Julian Calendar:
|
||||
" 2361210 == Sep 2, 1752, which was followed immediately by Sep 14, 1752
|
||||
" in England
|
||||
let c = julday + 32082
|
||||
let d = (4*c + 3)/1461
|
||||
let e = c - (1461*d)/4
|
||||
let m = (5*e + 2)/153
|
||||
let day = e - (153*m + 2)/5 + 1
|
||||
let month = m + 3 - 12*(m/10)
|
||||
let year = d - 4800 + m/10
|
||||
if year <= 0
|
||||
" proleptic Julian Calendar: there *is* no year 0!
|
||||
let year= year - 1
|
||||
endif
|
||||
|
||||
else
|
||||
" Gregorian calendar
|
||||
let t1 = julday + 68569
|
||||
let t2 = 4*t1/146097
|
||||
let t1 = t1 - (146097*t2 + 3)/4
|
||||
let yr = 4000*(t1 + 1)/1461001
|
||||
let t1 = t1 - (1461*yr/4 - 31)
|
||||
let mo = 80*t1/2447
|
||||
let day = (t1 - 2447*mo/80)
|
||||
let t1 = mo/11
|
||||
let month = (mo + 2 - 12*t1)
|
||||
let year = (100*(t2 - 49) + yr + t1)
|
||||
endif
|
||||
|
||||
let month = (month<10) ? '0' . month : month
|
||||
let day = (day < 10) ? '0' . day : day
|
||||
|
||||
if a:0 > 0
|
||||
if a:1 == 1 || a:1 =~ "ymd"
|
||||
return year."-".month."/".day
|
||||
elseif a:1 == 2 || a:1 =~ "mdy"
|
||||
return month."-".day."/".year
|
||||
elseif a:1 == 3 || a:1 =~ "dmy"
|
||||
return day."-".month."/".year
|
||||
else
|
||||
return year."-".month."/".day
|
||||
endif
|
||||
else
|
||||
return year."-".month."-".day
|
||||
endif
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" vim: ts=4 fdm=marker
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
" org.vim - VimOrganizer plugin for Vim
|
||||
" -------------------------------------------------------------
|
||||
" Version: 0.30
|
||||
" Maintainer: Herbert Sitz <hesitz@gmail.com>
|
||||
" Last Change: 2011 Nov 02
|
||||
"
|
||||
" Script: http://www.vim.org/scripts/script.php?script_id=3342
|
||||
" Github page: http://github.com/hsitz/VimOrganizer
|
||||
" Copyright: (c) 2010, 2011 by Herbert Sitz
|
||||
" The VIM LICENSE applies to all files in the
|
||||
" VimOrganizer plugin.
|
||||
" (See the Vim copyright except read "VimOrganizer"
|
||||
" in places where that copyright refers to "Vim".)
|
||||
" http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
|
||||
" No warranty, express or implied.
|
||||
" *** *** Use At-Your-Own-Risk *** ***
|
||||
|
||||
if exists("g:org_autoload_funcs")
|
||||
finish
|
||||
endif
|
||||
|
||||
let g:org_autoload_funcs=1
|
||||
|
||||
function! org#SetOrgFileType()
|
||||
"if expand("%:e") == 'org'
|
||||
if &filetype != 'org'
|
||||
execute "set filetype=org"
|
||||
|
||||
" if !exists('g:org_todo_setup')
|
||||
" let g:org_todo_setup = 'TODO | DONE'
|
||||
" endif
|
||||
" if !exists('g:org_tag_setup')
|
||||
" let g:org_tag_setup = '{home(h) work(w)}'
|
||||
" endif
|
||||
"
|
||||
" call OrgProcessConfigLines()
|
||||
" exec "syntax match DONETODO '" . b:v.todoDoneMatch . "' containedin=OL1,OL2,OL3,OL4,OL5,OL6"
|
||||
" exec "syntax match NOTDONETODO '" . b:v.todoNotDoneMatch . "' containedin=OL1,OL2,OL3,OL4,OL5,OL6"
|
||||
|
||||
endif
|
||||
"endif
|
||||
endfunction
|
||||
|
||||
function! org#Pad(s,amt)
|
||||
return a:s . repeat(' ',a:amt - len(a:s))
|
||||
endfunction
|
||||
|
||||
function! org#Timestamp()
|
||||
return strftime("%Y-%m-%d %a %H:%M")
|
||||
endfunction
|
||||
|
||||
function! org#GetGroupHighlight(group)
|
||||
" this code was copied and modified from code posted on StackOverflow
|
||||
" http://stackoverflow.com/questions/1331213/how-to-modify-existing-highlight-group-in-vim
|
||||
" Redirect the output of the "hi" command into a variable
|
||||
" and find the highlighting
|
||||
redir => GroupDetails
|
||||
exe "silent hi " . a:group
|
||||
redir END
|
||||
|
||||
" Resolve linked groups to find the root highlighting scheme
|
||||
while GroupDetails =~ "links to"
|
||||
let index = stridx(GroupDetails, "links to") + len("links to")
|
||||
let LinkedGroup = strpart(GroupDetails, index + 1)
|
||||
redir => GroupDetails
|
||||
exe "silent hi " . LinkedGroup
|
||||
redir END
|
||||
endwhile
|
||||
|
||||
" Extract the highlighting details (the bit after "xxx")
|
||||
let MatchGroups = matchlist(GroupDetails, '\<xxx\>\s\+\(.*\)')
|
||||
let ExistingHighlight = MatchGroups[1]
|
||||
|
||||
return ExistingHighlight
|
||||
|
||||
endfunction
|
||||
|
|
@ -0,0 +1,525 @@
|
|||
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||
" Vimwiki autoload plugin file
|
||||
" Desc: Tables
|
||||
" | Easily | manageable | text | tables | ! |
|
||||
" |--------+------------+-------+--------+---------|
|
||||
" | Have | fun! | Drink | tea | Period. |
|
||||
"
|
||||
" Author: Maxim Kim <habamax@gmail.com>
|
||||
" Home: http://code.google.com/p/vimwiki/
|
||||
|
||||
" Load only once {{{
|
||||
if exists("g:loaded_vimwiki_tbl_auto") || &cp
|
||||
finish
|
||||
endif
|
||||
let g:loaded_vimwiki_tbl_auto = 1
|
||||
"}}}
|
||||
|
||||
let s:textwidth = &tw
|
||||
|
||||
" Misc functions {{{
|
||||
function! s:wide_len(str) "{{{
|
||||
" vim73 has new function that gives correct string width.
|
||||
if exists("*strdisplaywidth")
|
||||
return strdisplaywidth(a:str)
|
||||
endif
|
||||
|
||||
" get str display width in vim ver < 7.2
|
||||
if !g:vimwiki_CJK_length
|
||||
let ret = strlen(substitute(a:str, '.', 'x', 'g'))
|
||||
else
|
||||
let savemodified = &modified
|
||||
let save_cursor = getpos('.')
|
||||
exe "norm! o\<esc>"
|
||||
call setline(line("."), a:str)
|
||||
let ret = virtcol("$") - 1
|
||||
d
|
||||
call setpos('.', save_cursor)
|
||||
let &modified = savemodified
|
||||
endif
|
||||
return ret
|
||||
endfunction "}}}
|
||||
|
||||
function! s:is_table(line) "{{{
|
||||
return a:line =~ '^\s*\%(|[^|]\+\)\+|\s*$' || s:is_separator(a:line)
|
||||
endfunction "}}}
|
||||
|
||||
function! s:is_separator(line) "{{{
|
||||
return a:line =~ '^\s*[|+]\s*--[-|+]\+'
|
||||
endfunction "}}}
|
||||
|
||||
function! s:is_last_column(lnum, cnum) "{{{
|
||||
return strpart(getline(a:lnum), a:cnum - 1) =~ '^[^|]*|\s*$'
|
||||
endfunction "}}}
|
||||
|
||||
function! s:is_first_column(lnum, cnum) "{{{
|
||||
let line = strpart(getline(a:lnum), 0, a:cnum - 1)
|
||||
return line =~ '^\s*|[^|]*$' || line =~ '^\s*$'
|
||||
endfunction "}}}
|
||||
|
||||
function! s:count_separators_up(lnum) "{{{
|
||||
let lnum = a:lnum - 1
|
||||
while lnum > 1
|
||||
if !s:is_separator(getline(lnum))
|
||||
break
|
||||
endif
|
||||
let lnum -= 1
|
||||
endwhile
|
||||
|
||||
return (a:lnum-lnum)
|
||||
endfunction "}}}
|
||||
|
||||
function! s:count_separators_down(lnum) "{{{
|
||||
let lnum = a:lnum + 1
|
||||
while lnum < line('$')
|
||||
if !s:is_separator(getline(lnum))
|
||||
break
|
||||
endif
|
||||
let lnum += 1
|
||||
endwhile
|
||||
|
||||
return (lnum-a:lnum)
|
||||
endfunction "}}}
|
||||
|
||||
function! s:create_empty_row(cols) "{{{
|
||||
let first_cell = "| |"
|
||||
let cell = " |"
|
||||
let row = first_cell
|
||||
|
||||
for c in range(a:cols - 1)
|
||||
let row .= cell
|
||||
endfor
|
||||
|
||||
return row
|
||||
endfunction "}}}
|
||||
|
||||
function! s:create_row_sep(cols) "{{{
|
||||
let first_cell = "|---+"
|
||||
let cell = "---+"
|
||||
let last_cell = "---|"
|
||||
|
||||
if a:cols < 2
|
||||
return "|---|"
|
||||
endif
|
||||
|
||||
let row = first_cell
|
||||
|
||||
for c in range(a:cols - 2)
|
||||
let row .= cell
|
||||
endfor
|
||||
|
||||
let row .= last_cell
|
||||
|
||||
return row
|
||||
endfunction "}}}
|
||||
|
||||
function! s:get_values(line) "{{{
|
||||
return split(a:line, '\s*|\s*', 1)[1:-2]
|
||||
endfunction "}}}
|
||||
|
||||
function! s:col_count(lnum) "{{{
|
||||
let line = getline(a:lnum)
|
||||
if !s:is_separator(line)
|
||||
return len(split(line, '\s*|\s*', 1)[1:-2])
|
||||
else
|
||||
return len(split(line, '-+-', 1))
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
function! s:get_indent(lnum) "{{{
|
||||
if !s:is_table(getline(a:lnum))
|
||||
return
|
||||
endif
|
||||
|
||||
let indent = 0
|
||||
|
||||
let lnum = a:lnum - 1
|
||||
while lnum > 1
|
||||
let line = getline(lnum)
|
||||
if !s:is_table(line)
|
||||
let indent = indent(lnum+1)
|
||||
break
|
||||
endif
|
||||
let lnum -= 1
|
||||
endwhile
|
||||
|
||||
return indent
|
||||
endfunction " }}}
|
||||
|
||||
function! s:get_rows(lnum) "{{{
|
||||
if !s:is_table(getline(a:lnum))
|
||||
return
|
||||
endif
|
||||
|
||||
let upper_rows = []
|
||||
let lower_rows = []
|
||||
|
||||
let lnum = a:lnum - 1
|
||||
while lnum > 1
|
||||
let line = getline(lnum)
|
||||
if s:is_table(line)
|
||||
call add(upper_rows, [lnum, line])
|
||||
else
|
||||
break
|
||||
endif
|
||||
let lnum -= 1
|
||||
endwhile
|
||||
call reverse(upper_rows)
|
||||
|
||||
let lnum = a:lnum
|
||||
while lnum <= line('$')
|
||||
let line = getline(lnum)
|
||||
if s:is_table(line)
|
||||
call add(lower_rows, [lnum, line])
|
||||
else
|
||||
break
|
||||
endif
|
||||
let lnum += 1
|
||||
endwhile
|
||||
|
||||
return upper_rows + lower_rows
|
||||
endfunction "}}}
|
||||
|
||||
function! s:get_cell_max_lens(lnum) "{{{
|
||||
let max_lens = {}
|
||||
for [lnum, row] in s:get_rows(a:lnum)
|
||||
if s:is_separator(row)
|
||||
continue
|
||||
endif
|
||||
let cells = s:get_values(row)
|
||||
for idx in range(len(cells))
|
||||
let value = cells[idx]
|
||||
if has_key(max_lens, idx)
|
||||
let max_lens[idx] = max([s:wide_len(value), max_lens[idx]])
|
||||
else
|
||||
let max_lens[idx] = s:wide_len(value)
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
return max_lens
|
||||
endfunction "}}}
|
||||
|
||||
function! s:get_aligned_rows(lnum, col1, col2) "{{{
|
||||
let max_lens = s:get_cell_max_lens(a:lnum)
|
||||
let rows = []
|
||||
for [lnum, row] in s:get_rows(a:lnum)
|
||||
if s:is_separator(row)
|
||||
let new_row = s:fmt_sep(max_lens, a:col1, a:col2)
|
||||
else
|
||||
let new_row = s:fmt_row(row, max_lens, a:col1, a:col2)
|
||||
endif
|
||||
call add(rows, [lnum, new_row])
|
||||
endfor
|
||||
return rows
|
||||
endfunction "}}}
|
||||
|
||||
" Number of the current column. Starts from 0.
|
||||
function! s:cur_column() "{{{
|
||||
let line = getline('.')
|
||||
if !s:is_table(line)
|
||||
return -1
|
||||
endif
|
||||
if s:is_separator(line)
|
||||
let sep = '[+|]'
|
||||
else
|
||||
let sep = '|'
|
||||
endif
|
||||
|
||||
let curs_pos = col('.')
|
||||
let mpos = match(line, '|', 0)
|
||||
let col = -1
|
||||
while mpos < curs_pos && mpos != -1
|
||||
let mpos = match(line, sep, mpos+1)
|
||||
if mpos != -1
|
||||
let col += 1
|
||||
endif
|
||||
endwhile
|
||||
return col
|
||||
endfunction "}}}
|
||||
|
||||
" }}}
|
||||
|
||||
" Format functions {{{
|
||||
function! s:fmt_cell(cell, max_len) "{{{
|
||||
let cell = ' '.a:cell.' '
|
||||
|
||||
let diff = a:max_len - s:wide_len(a:cell)
|
||||
if diff == 0 && empty(a:cell)
|
||||
let diff = 1
|
||||
endif
|
||||
|
||||
let cell .= repeat(' ', diff)
|
||||
return cell
|
||||
endfunction "}}}
|
||||
|
||||
function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
||||
let new_line = '|'
|
||||
let cells = s:get_values(a:line)
|
||||
for idx in range(len(cells))
|
||||
if idx == a:col1
|
||||
let idx = a:col2
|
||||
elseif idx == a:col2
|
||||
let idx = a:col1
|
||||
endif
|
||||
let value = cells[idx]
|
||||
let new_line .= s:fmt_cell(value, a:max_lens[idx]).'|'
|
||||
endfor
|
||||
|
||||
let idx = len(cells)
|
||||
while idx < len(a:max_lens)
|
||||
let new_line .= s:fmt_cell('', a:max_lens[idx]).'|'
|
||||
let idx += 1
|
||||
endwhile
|
||||
return new_line
|
||||
endfunction "}}}
|
||||
|
||||
function! s:fmt_cell_sep(max_len) "{{{
|
||||
if a:max_len == 0
|
||||
return repeat('-', 3)
|
||||
else
|
||||
return repeat('-', a:max_len+2)
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
function! s:fmt_sep(max_lens, col1, col2) "{{{
|
||||
let sep = '|'
|
||||
for idx in range(len(a:max_lens))
|
||||
if idx == a:col1
|
||||
let idx = a:col2
|
||||
elseif idx == a:col2
|
||||
let idx = a:col1
|
||||
endif
|
||||
let sep .= s:fmt_cell_sep(a:max_lens[idx]).'+'
|
||||
endfor
|
||||
let sep = substitute(sep, '+$', '|', '')
|
||||
return sep
|
||||
endfunction "}}}
|
||||
"}}}
|
||||
|
||||
" Keyboard functions "{{{
|
||||
function! s:kbd_create_new_row(cols, goto_first) "{{{
|
||||
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
||||
let cmd .= "\<ESC>:call org#tbl#format(line('.'))\<CR>"
|
||||
if a:goto_first
|
||||
let cmd .= "\<ESC>0:call search('|', 'c', line('.'))\<CR>la"
|
||||
else
|
||||
let cmd .= "0".(col('.')-1)."lT|a"
|
||||
endif
|
||||
return cmd
|
||||
endfunction "}}}
|
||||
|
||||
function! s:kbd_goto_next_row() "{{{
|
||||
let cmd = "\<ESC>jt|T|a"
|
||||
return cmd
|
||||
endfunction "}}}
|
||||
|
||||
function! s:kbd_goto_prev_row() "{{{
|
||||
let cmd = "\<ESC>jt|T|a"
|
||||
return cmd
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#next_col(last)
|
||||
return s:kbd_goto_next_col(a:last)
|
||||
endfunction
|
||||
function! s:kbd_goto_next_col(last) "{{{
|
||||
if a:last
|
||||
let seps = s:count_separators_down(line('.'))
|
||||
if mode() == 'n'
|
||||
let cmd = seps . "j0:call search('|', 'c', line('.'))\<CR>l"
|
||||
else
|
||||
let cmd = "\<ESC>".seps."j0:call search('|', 'c', line('.'))\<CR>la"
|
||||
endif
|
||||
else
|
||||
if mode() == 'n'
|
||||
let cmd = ":call search('|', 'c', line('.'))\<CR>l"
|
||||
else
|
||||
let cmd = "\<ESC>:call search('|', 'c', line('.'))\<CR>la"
|
||||
endif
|
||||
endif
|
||||
return cmd
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#prev_col(first)
|
||||
return s:kbd_goto_prev_col(a:first)
|
||||
endfunction
|
||||
function! s:kbd_goto_prev_col(first) "{{{
|
||||
if a:first
|
||||
let seps = s:count_separators_up(line('.'))
|
||||
let cmd = "\<ESC>".seps."k$:call search('|', 'b', line('.'))\<CR>la"
|
||||
else
|
||||
let cmd = "\<ESC>2F|la"
|
||||
endif
|
||||
return cmd
|
||||
endfunction "}}}
|
||||
|
||||
"}}}
|
||||
|
||||
" Global functions {{{
|
||||
function! org#tbl#kbd_cr() "{{{
|
||||
let lnum = line('.')
|
||||
if !s:is_table(getline(lnum))
|
||||
return "\<CR>"
|
||||
endif
|
||||
|
||||
if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1))
|
||||
let cols = len(s:get_values(getline(lnum)))
|
||||
return s:kbd_create_new_row(cols, 0)
|
||||
else
|
||||
return s:kbd_goto_next_row()
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#kbd_tab() "{{{
|
||||
let lnum = line('.')
|
||||
if !s:is_table(getline(lnum))
|
||||
return "\<Tab>"
|
||||
endif
|
||||
|
||||
let last = s:is_last_column(lnum, col('.'))
|
||||
if last && !s:is_table(getline(lnum+1))
|
||||
let cols = len(s:get_values(getline(lnum)))
|
||||
return s:kbd_create_new_row(cols, 1)
|
||||
endif
|
||||
return s:kbd_goto_next_col(last)
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#kbd_shift_tab() "{{{
|
||||
let lnum = line('.')
|
||||
if !s:is_table(getline(lnum))
|
||||
return "\<S-Tab>"
|
||||
endif
|
||||
|
||||
let first = s:is_first_column(lnum, col('.'))
|
||||
if first && !s:is_table(getline(lnum-1))
|
||||
return ""
|
||||
endif
|
||||
return s:kbd_goto_prev_col(first)
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#format(lnum, ...) "{{{
|
||||
let line = getline(a:lnum)
|
||||
if !s:is_table(line)
|
||||
return
|
||||
endif
|
||||
|
||||
if a:0 == 2
|
||||
let col1 = a:1
|
||||
let col2 = a:2
|
||||
else
|
||||
let col1 = 0
|
||||
let col2 = 0
|
||||
endif
|
||||
|
||||
let indent = s:get_indent(a:lnum)
|
||||
|
||||
for [lnum, row] in s:get_aligned_rows(a:lnum, col1, col2)
|
||||
let row = repeat(' ', indent).row
|
||||
call setline(lnum, row)
|
||||
endfor
|
||||
|
||||
let &tw = s:textwidth
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#create(...) "{{{
|
||||
if a:0 > 1
|
||||
let cols = a:1
|
||||
let rows = a:2
|
||||
elseif a:0 == 1
|
||||
let cols = a:1
|
||||
let rows = 2
|
||||
elseif a:0 == 0
|
||||
let cols = 5
|
||||
let rows = 2
|
||||
endif
|
||||
|
||||
if cols < 1
|
||||
let cols = 5
|
||||
endif
|
||||
|
||||
if rows < 1
|
||||
let rows = 2
|
||||
endif
|
||||
|
||||
let lines = []
|
||||
let row = s:create_empty_row(cols)
|
||||
|
||||
call add(lines, row)
|
||||
if rows > 1
|
||||
call add(lines, s:create_row_sep(cols))
|
||||
endif
|
||||
|
||||
for r in range(rows - 1)
|
||||
call add(lines, row)
|
||||
endfor
|
||||
|
||||
call append(line('.'), lines)
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#align_or_cmd(cmd) "{{{
|
||||
if s:is_table(getline('.'))
|
||||
call org#tbl#format(line('.'))
|
||||
else
|
||||
exe 'normal! '.a:cmd
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#reset_tw(lnum) "{{{
|
||||
let line = getline(a:lnum)
|
||||
if !s:is_table(line)
|
||||
return
|
||||
endif
|
||||
|
||||
let s:textwidth = &tw
|
||||
let &tw = 0
|
||||
endfunction "}}}
|
||||
|
||||
" TODO: move_column_left and move_column_right are good candidates to be
|
||||
" refactored.
|
||||
function! org#tbl#move_column_left() "{{{
|
||||
if !s:is_table(getline('.'))
|
||||
return
|
||||
endif
|
||||
|
||||
let cur_col = s:cur_column()
|
||||
if cur_col == -1
|
||||
return
|
||||
endif
|
||||
|
||||
if cur_col > 0
|
||||
call org#tbl#format(line('.'), cur_col-1, cur_col)
|
||||
call cursor(line('.'), 1)
|
||||
if !s:is_separator(getline('.'))
|
||||
call search('\%(|[^|]\+\)\{'.(cur_col-1).'}| .', 'eW')
|
||||
else
|
||||
call search('|\%([^+]\++\)\{'.(cur_col-1).'}--', 'eW')
|
||||
endif
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#move_column_right() "{{{
|
||||
if !s:is_table(getline('.'))
|
||||
return
|
||||
endif
|
||||
|
||||
let cur_col = s:cur_column()
|
||||
if cur_col == -1
|
||||
return
|
||||
endif
|
||||
|
||||
if cur_col < s:col_count(line('.'))-1
|
||||
call org#tbl#format(line('.'), cur_col, cur_col+1)
|
||||
call cursor(line('.'), 1)
|
||||
if !s:is_separator(getline('.'))
|
||||
call search('\%(|[^|]\+\)\{'.(cur_col+1).'}| .', 'eW')
|
||||
else
|
||||
call search('|\%([^+]\++\)\{'.(cur_col+1).'}--', 'eW')
|
||||
endif
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
function! org#tbl#get_rows(lnum) "{{{
|
||||
return s:get_rows(a:lnum)
|
||||
endfunction "}}}
|
||||
|
||||
"}}}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
The vim73 patch in this directory does two things:
|
||||
|
||||
1. Enables level-dependent fold highlighting in Vim73.
|
||||
2. Enables separate TODO highlighting in folded headings
|
||||
in VimOrganizer, so TODO's stand out even when a
|
||||
heading is folded.
|
||||
|
||||
The vim72 patch is old and only does (1) above.
|
||||
|
||||
If someone is using a version of Windows and wants to avoid
|
||||
recompiling process you can contact me and I will send you an
|
||||
executable you should be able to use on your system.
|
||||
|
||||
Herbert Sitz
|
||||
hesitz@gmail.com
|
|
@ -0,0 +1,79 @@
|
|||
=== (+2,-1) src/eval.c ===
|
||||
@@ -355,6 +355,7 @@
|
||||
{VV_NAME("operator", VAR_STRING), VV_RO},
|
||||
{VV_NAME("searchforward", VAR_NUMBER), 0},
|
||||
{VV_NAME("oldfiles", VAR_LIST), 0},
|
||||
+ {VV_NAME("foldhighlight", VAR_NUMBER), 0},
|
||||
};
|
||||
|
||||
/* shorthand */
|
||||
=== (+18,-9) src/screen.c ===
|
||||
@@ -2179,9 +2179,17 @@
|
||||
# define RL_MEMSET(p, v, l) for (ri = 0; ri < l; ++ri) \
|
||||
ScreenAttrs[off + (p) + ri] = v
|
||||
#endif
|
||||
+ /*
|
||||
+ * 4. Compose the folded-line string with 'foldtext', if set.
|
||||
+ */
|
||||
+ text = get_foldtext(wp, lnum, lnume, foldinfo, buf);
|
||||
+
|
||||
+ txtcol = col; /* remember where text starts */
|
||||
|
||||
/* Set all attributes of the 'number' column and the text */
|
||||
- RL_MEMSET(col, hl_attr(HLF_FL), W_WIDTH(wp) - col);
|
||||
+ //RL_MEMSET(col, hl_attr(HLF_FL), W_WIDTH(wp) - col);
|
||||
+ RL_MEMSET(col, hl_attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)), W_WIDTH(wp) - col);
|
||||
+
|
||||
|
||||
#ifdef FEAT_SIGNS
|
||||
/* If signs are being displayed, add two spaces. */
|
||||
@@ -2196,10 +2204,11 @@
|
||||
if (wp->w_p_rl)
|
||||
/* the line number isn't reversed */
|
||||
copy_text_attr(off + W_WIDTH(wp) - len - col,
|
||||
- (char_u *)" ", len, hl_attr(HLF_FL));
|
||||
+ (char_u *)" ", len, hl_attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)));
|
||||
+
|
||||
else
|
||||
# endif
|
||||
- copy_text_attr(off + col, (char_u *)" ", len, hl_attr(HLF_FL));
|
||||
+ copy_text_attr(off + col, (char_u *)" ", len, hl_attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)));
|
||||
col += len;
|
||||
}
|
||||
}
|
||||
@@ -2222,10 +2231,10 @@
|
||||
if (wp->w_p_rl)
|
||||
/* the line number isn't reversed */
|
||||
copy_text_attr(off + W_WIDTH(wp) - len - col, buf, len,
|
||||
- hl_attr(HLF_FL));
|
||||
+ hl_attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)));
|
||||
else
|
||||
#endif
|
||||
- copy_text_attr(off + col, buf, len, hl_attr(HLF_FL));
|
||||
+ copy_text_attr(off + col, buf, len, hl_attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)));
|
||||
col += len;
|
||||
}
|
||||
}
|
||||
@@ -2233,9 +2242,9 @@
|
||||
/*
|
||||
* 4. Compose the folded-line string with 'foldtext', if set.
|
||||
*/
|
||||
- text = get_foldtext(wp, lnum, lnume, foldinfo, buf);
|
||||
-
|
||||
- txtcol = col; /* remember where text starts */
|
||||
+ //text = get_foldtext(wp, lnum, lnume, foldinfo, buf);
|
||||
+// moved up above to heappen earlier h.s.
|
||||
+ // txtcol = col; /* remember where text starts */
|
||||
|
||||
/*
|
||||
* 5. move the text to current_ScreenLine. Fill up with "fill_fold".
|
||||
=== (+3,-2) src/vim.h ===
|
||||
@@ -1767,7 +1767,8 @@
|
||||
#define VV_OP 52
|
||||
#define VV_SEARCHFORWARD 53
|
||||
#define VV_OLDFILES 54
|
||||
-#define VV_LEN 55 /* number of v: vars */
|
||||
+#define VV_FOLDHIGHLIGHT 55
|
||||
+#define VV_LEN 56 /* number of v: vars */
|
||||
|
||||
#ifdef FEAT_CLIPBOARD
|
|
@ -0,0 +1,113 @@
|
|||
diff -u ./src/eval.c ./patched_src/eval.c
|
||||
--- ./src/eval.c 2010-08-09 13:12:14.000000000 -0700
|
||||
+++ ./patched_src/eval.c 2011-08-24 12:45:30.990183200 -0700
|
||||
@@ -362,6 +362,8 @@
|
||||
{VV_NAME("operator", VAR_STRING), VV_RO},
|
||||
{VV_NAME("searchforward", VAR_NUMBER), 0},
|
||||
{VV_NAME("oldfiles", VAR_LIST), 0},
|
||||
+ {VV_NAME("foldhighlight", VAR_NUMBER), 0},
|
||||
+ {VV_NAME("todohighlight", VAR_NUMBER), 0},
|
||||
};
|
||||
|
||||
/* shorthand */
|
||||
diff -u ./src/screen.c ./patched_src/screen.c
|
||||
--- ./src/screen.c 2010-08-13 06:21:27.000000000 -0700
|
||||
+++ ./patched_src/screen.c 2011-10-15 04:01:17.947926300 -0700
|
||||
@@ -2214,6 +2214,8 @@
|
||||
* 4. Compose the text
|
||||
* 5. Add the text
|
||||
* 6. set highlighting for the Visual area an other text
|
||||
+ * NOTE: in patch for VimOrganizer step 4, composing text
|
||||
+ * is moved up to happen as part of step 2.
|
||||
*/
|
||||
col = 0;
|
||||
|
||||
@@ -2271,10 +2273,16 @@
|
||||
# define RL_MEMSET(p, v, l) for (ri = 0; ri < l; ++ri) \
|
||||
ScreenAttrs[off + (p) + ri] = v
|
||||
#endif
|
||||
+ /*
|
||||
+ * 4. Compose the folded-line string with 'foldtext', if set.
|
||||
+ */
|
||||
+ text = get_foldtext(wp, lnum, lnume, foldinfo, buf);
|
||||
+
|
||||
+ txtcol = col; /* remember where text starts */
|
||||
+
|
||||
+ /* Set all attributes of the 'number' column and the text */
|
||||
+ RL_MEMSET(col, syn_id2attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)), W_WIDTH(wp) - col);
|
||||
|
||||
- /* Set all attributes of the 'number' or 'relativenumber' column and the
|
||||
- * text */
|
||||
- RL_MEMSET(col, hl_attr(HLF_FL), W_WIDTH(wp) - col);
|
||||
|
||||
#ifdef FEAT_SIGNS
|
||||
/* If signs are being displayed, add two spaces. */
|
||||
@@ -2289,10 +2297,11 @@
|
||||
if (wp->w_p_rl)
|
||||
/* the line number isn't reversed */
|
||||
copy_text_attr(off + W_WIDTH(wp) - len - col,
|
||||
- (char_u *)" ", len, hl_attr(HLF_FL));
|
||||
+ (char_u *)" ", len, hl_attr(HLF_SC));
|
||||
else
|
||||
# endif
|
||||
- copy_text_attr(off + col, (char_u *)" ", len, hl_attr(HLF_FL));
|
||||
+ copy_text_attr(off + col, (char_u *)" ", len, hl_attr(HLF_SC));
|
||||
+
|
||||
col += len;
|
||||
}
|
||||
}
|
||||
@@ -2324,20 +2333,35 @@
|
||||
if (wp->w_p_rl)
|
||||
/* the line number isn't reversed */
|
||||
copy_text_attr(off + W_WIDTH(wp) - len - col, buf, len,
|
||||
- hl_attr(HLF_FL));
|
||||
+ hl_attr(HLF_N));
|
||||
+ //syn_id2attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)));
|
||||
+
|
||||
else
|
||||
#endif
|
||||
- copy_text_attr(off + col, buf, len, hl_attr(HLF_FL));
|
||||
+ copy_text_attr(off + col, buf, len, hl_attr(HLF_N));
|
||||
+ //copy_text_attr(off + col, buf, len, syn_id2attr(get_vim_var_nr(VV_FOLDHIGHLIGHT)));
|
||||
+
|
||||
col += len;
|
||||
}
|
||||
}
|
||||
|
||||
+ /* now set attributes for vimorganizer todo word in headline, if any */
|
||||
+ /* v:todohighlight is set in user's OrgFoldText() function. . . */
|
||||
+ if (get_vim_var_nr(VV_TODOHIGHLIGHT) > 0 )
|
||||
+ {
|
||||
+ int start=0, end;
|
||||
+
|
||||
+ while( *(text + start) == ' ' )
|
||||
+ start++;
|
||||
+ end = start;
|
||||
+ while( *(text + end) != ' ' )
|
||||
+ end++;
|
||||
+ RL_MEMSET(start+col, syn_id2attr(get_vim_var_nr(VV_TODOHIGHLIGHT)), end - start);
|
||||
+ }
|
||||
/*
|
||||
* 4. Compose the folded-line string with 'foldtext', if set.
|
||||
*/
|
||||
- text = get_foldtext(wp, lnum, lnume, foldinfo, buf);
|
||||
-
|
||||
- txtcol = col; /* remember where text starts */
|
||||
+ // moved up above to happen earlier h.s.
|
||||
|
||||
/*
|
||||
* 5. move the text to current_ScreenLine. Fill up with "fill_fold".
|
||||
diff -u ./src/vim.h ./patched_src/vim.h
|
||||
--- ./src/vim.h 2010-07-29 11:46:39.000000000 -0700
|
||||
+++ ./patched_src/vim.h 2011-08-11 14:22:52.525545700 -0700
|
||||
@@ -1842,7 +1842,9 @@
|
||||
#define VV_OP 52
|
||||
#define VV_SEARCHFORWARD 53
|
||||
#define VV_OLDFILES 54
|
||||
-#define VV_LEN 55 /* number of v: vars */
|
||||
+#define VV_FOLDHIGHLIGHT 55
|
||||
+#define VV_TODOHIGHLIGHT 56
|
||||
+#define VV_LEN 57 /* number of v: vars */
|
||||
|
||||
#ifdef FEAT_CLIPBOARD
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,39 @@
|
|||
" org.vim - VimOrganizer plugin for Vim
|
||||
" -------------------------------------------------------------
|
||||
" Version: 0.30
|
||||
" Maintainer: Herbert Sitz <hesitz@gmail.com>
|
||||
" Last Change: 2011 Nov 02
|
||||
"
|
||||
" Script: http://www.vim.org/scripts/script.php?script_id=3342
|
||||
" Github page: http://github.com/hsitz/VimOrganizer
|
||||
" Copyright: (c) 2010, 2011 by Herbert Sitz
|
||||
" The VIM LICENSE applies to all files in the
|
||||
" VimOrganizer plugin.
|
||||
" (See the Vim copyright except read "VimOrganizer"
|
||||
" in places where that copyright refers to "Vim".)
|
||||
" http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
|
||||
" No warranty, express or implied.
|
||||
" *** *** Use At-Your-Own-Risk *** ***
|
||||
|
||||
nnoremap <silent> <buffer> <localleader>ag :call OrgAgendaDashboard()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>et :call OrgTagsEdit()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>ci :call OrgClockIn()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>co :call OrgClockOut()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>d :call OrgDateDashboard()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>t :call OrgTodoDashboard()<cr>
|
||||
"nnoremap <silent> <buffer> q :sign unplace * | quit<cr>
|
||||
nnoremap <silent> <buffer> q :call OrgQuitAgenda()<cr>
|
||||
function! OrgQuitAgenda()
|
||||
sign unplace *
|
||||
bw
|
||||
call clearmatches()
|
||||
let b:v.chosen_agenda_heading = 0
|
||||
if bufnr('ColHeadBuffer') > -1
|
||||
"main window has column headings window that
|
||||
"is now showing a blank buffer line, push back up . . .
|
||||
resize 100
|
||||
endif
|
||||
"quit
|
||||
endfunction
|
||||
|
||||
nnoremap <silent> <buffer> <c-tab> :wincmd k<cr>
|
|
@ -0,0 +1,176 @@
|
|||
" org.vim - VimOrganizer plugin for Vim
|
||||
" -------------------------------------------------------------
|
||||
" Version: 0.30
|
||||
" Maintainer: Herbert Sitz <hesitz@gmail.com>
|
||||
" Last Change: 2011 Nov 02
|
||||
"
|
||||
" Script: http://www.vim.org/scripts/script.php?script_id=3342
|
||||
" Github page: http://github.com/hsitz/VimOrganizer
|
||||
" Copyright: (c) 2010, 2011 by Herbert Sitz
|
||||
" The VIM LICENSE applies to all files in the
|
||||
" VimOrganizer plugin.
|
||||
" (See the Vim copyright except read "VimOrganizer"
|
||||
" in places where that copyright refers to "Vim".)
|
||||
" http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
|
||||
" No warranty, express or implied.
|
||||
" *** *** Use At-Your-Own-Risk *** ***
|
||||
"
|
||||
"Section Mappings and Endstuff
|
||||
" below block of 10 or 15 maps are ones collected
|
||||
" from body of doc that weren't getting assigned for docs
|
||||
" oepened after initial org filetype doc
|
||||
nnoremap <silent> <buffer> <tab> :call OrgCycle()<cr>
|
||||
nnoremap <silent> <buffer> <s-tab> :call OrgGlobalCycle()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>ci :call OrgClockIn(line("."))<cr>
|
||||
nnoremap <silent> <buffer> <localleader>co :call OrgClockOut()<cr>
|
||||
"cnoremap <space> <C-\>e(<SID>OrgDateEdit())<CR>
|
||||
" dl is for the date on the current line
|
||||
noremap <buffer> <localleader>x :call OrgExportDashboard()<cr>
|
||||
noremap <buffer> <localleader>d :call OrgDateDashboard()<cr>
|
||||
noremap <buffer> <localleader>b :call OrgTableDashboard()<cr>
|
||||
"noremap <silent> <buffer> <localleader>dg :call OrgGenericDateEdit()<cr>
|
||||
"noremap <silent> <buffer> <localleader>dt :call OrgDateEdit('TIMESTAMP')<cr>
|
||||
"noremap <silent> <buffer> <localleader>dd :call OrgDateEdit('DEADLINE')<cr>
|
||||
"noremap <silent> <buffer> <localleader>dc :call OrgDateEdit('CLOSED')<cr>
|
||||
"noremap <silent> <buffer> <localleader>ds :call OrgDateEdit('SCHEDULED')<cr>
|
||||
noremap <silent> <buffer> <localleader>a* :call OrgRunAgenda(strftime("%Y-%m-%d"),'w,'')<cr>
|
||||
noremap <silent> <buffer> <localleader>aa :call OrgRunAgenda(strftime("%Y-%m-%d"),'w,'+ANY_TODO')<cr>
|
||||
noremap <silent> <buffer> <localleader>at :call OrgRunAgenda(strftime("%Y-%m-%d"),'w,'+UNFINISHED_TODOS')<cr>
|
||||
noremap <silent> <buffer> <localleader>ad :call OrgRunAgenda(strftime("%Y-%m-%d"),'w,'+FINISHED_TODOS')<cr>
|
||||
noremap <silent> <buffer> <localleader>ag :call OrgAgendaDashboard()<cr>
|
||||
noremap <silent> <buffer> <localleader>ac :call OrgCustomSearchMenu()<cr>
|
||||
"command! -nargs=0 Agenda :call OrgAgendaDashboard()
|
||||
nnoremap <silent> <buffer> <s-up> :call OrgDateInc(1)<CR>
|
||||
nnoremap <silent> <buffer> <s-down> :call OrgDateInc(-1)<CR>
|
||||
nnoremap <silent> <buffer> <2-LeftMouse> :call OrgMouseDate()<CR>
|
||||
nnoremap <localleader>pl :call s:MyPopup()<cr>
|
||||
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"
|
||||
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
|
||||
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
|
||||
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
|
||||
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
|
||||
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"
|
||||
"map <silent> <localleader>b :call ShowBottomCal()<cr>
|
||||
|
||||
nnoremap <silent> <buffer> <localleader>et :call OrgTagsEdit()<cr>
|
||||
|
||||
" clear search matching
|
||||
nnoremap <silent> <buffer> <localleader>cs :let @/=''<cr>
|
||||
|
||||
noremap <buffer> <localleader>r :call OrgRefileDashboard()<cr>
|
||||
"noremap <silent> <buffer> <localleader>rh :call OrgRefile(line('.'))<cr>
|
||||
"noremap <silent> <buffer> <localleader>rj :call OrgJumpToRefilePoint()<cr>
|
||||
"noremap <silent> <buffer> <localleader>rx :call OrgJumpToRefilePointPersistent()<cr>
|
||||
"noremap <silent> <buffer> <localleader>rs :call OrgSetRefilePoint()<cr>
|
||||
"noremap <silent> <buffer> <localleader>rp :call OrgRefileToPermPoint(line('.'))<cr>
|
||||
noremap <silent> <buffer> <localleader>v :silent call OrgEval()<cr>
|
||||
|
||||
noremap <buffer> <C-K> <C-]>
|
||||
noremap <buffer> <C-N> <C-T>
|
||||
noremap <silent> <buffer> <localleader>0 :call OrgExpandWithoutText(99999)<CR>
|
||||
noremap <silent> <buffer> <localleader>9 :call OrgExpandWithoutText(9)<CR>
|
||||
noremap <silent> <buffer> <localleader>8 :call OrgExpandWithoutText(8)<CR>
|
||||
noremap <silent> <buffer> <localleader>7 :call OrgExpandWithoutText(7)<CR>
|
||||
noremap <silent> <buffer> <localleader>6 :call OrgExpandWithoutText(6)<CR>
|
||||
noremap <silent> <buffer> <localleader>5 :call OrgExpandWithoutText(5)<CR>
|
||||
noremap <silent> <buffer> <localleader>4 :call OrgExpandWithoutText(4)<CR>
|
||||
noremap <silent> <buffer> <localleader>3 :call OrgExpandWithoutText(3)<CR>
|
||||
noremap <silent> <buffer> <localleader>2 :call OrgExpandWithoutText(2)<CR>
|
||||
noremap <silent> <buffer> <localleader>1 :call OrgExpandWithoutText(1)<CR>
|
||||
noremap <silent> <buffer> <localleader><space> :call OrgExpandWithoutText(1)<CR>
|
||||
"noremap <silent> <buffer> <localleader>/ :let @/='exec call OrgExpandWithoutText(1)<CR>
|
||||
"noremap <silent> <buffer> <localleader>/ :let @a='/^\*\{1,' . &foldlevel . '\} .*'|call LevSearch()<cr>
|
||||
nnoremap <buffer> <expr> <localleader>/ '/^\*\{1,' . &foldlevel . '\} .*'
|
||||
nnoremap <buffer> <expr> <localleader>? '?^\*\{1,' . &foldlevel . '\} .*'
|
||||
|
||||
" set reasonable max limit of 12 for '0' command below, because it iterates
|
||||
" each for each level, just assume 12 is max. . .
|
||||
noremap <silent> <buffer> <localleader>,0 :call OrgShowSubs(12,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,9 :call OrgShowSubs(9,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,8 :call OrgShowSubs(8,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,7 :call OrgShowSubs(7,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,6 :call OrgShowSubs(6,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,5 :call OrgShowSubs(5,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,4 :call OrgShowSubs(4,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,3 :call OrgShowSubs(3,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,2 :call OrgShowSubs(2,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,1 :call OrgShowSubs(1,0)<CR>
|
||||
noremap <silent> <buffer> <localleader>,; :call OrgShowSubs(1,0)<CR>
|
||||
|
||||
|
||||
"nnoremap <silent> <buffer> <localleader>no :call NarrowOutline(line('.'))<cr>
|
||||
"nnoremap <silent> <buffer> <localleader>ns :call NarrowOutline(line('.'))<cr>
|
||||
"nnoremap <silent> <buffer> <localleader>nc :call NarrowCodeBlock(line('.'))<cr>
|
||||
nnoremap <silent> <buffer> <localleader>na :call NarrowCodeBlock(line('.'))<cr>
|
||||
nnoremap <silent> <buffer> <localleader>m :call OrgColumnsDashboard()<cr>
|
||||
" ----------------------------------------
|
||||
" table commands
|
||||
au InsertEnter *.org :call org#tbl#reset_tw(line("."))
|
||||
au InsertLeave *.org :call org#tbl#format(line("."))
|
||||
command! -buffer -nargs=* OrgTable call org#tbl#create(<f-args>)
|
||||
"nnoremap <silent> <buffer> <localleader>bc :call org#tbl#create()<cr>
|
||||
command! -buffer OrgTableAlignQ call org#tbl#align_or_cmd('gqq')
|
||||
command! -buffer OrgTableAlignW call org#tbl#align_or_cmd('gww')
|
||||
command! -buffer OrgTableMoveColumnLeft call org#tbl#move_column_left()
|
||||
"nnoremap <silent> <buffer> <localleader>bl :call org#tbl#move_column_left()<cr>
|
||||
command! -buffer OrgTableMoveColumnRight call org#tbl#move_column_right()
|
||||
"nnoremap <silent> <buffer> <localleader>br :call org#tbl#move_column_right()<cr>
|
||||
|
||||
" table function mappings
|
||||
inoremap <buffer> <expr> <CR> org#tbl#kbd_cr()
|
||||
inoremap <expr> <buffer> <Tab> org#tbl#kbd_tab()
|
||||
inoremap <expr> <buffer> <S-Tab> org#tbl#kbd_shift_tab()
|
||||
nnoremap <buffer> gqq :OrgTableAlignQ<CR>
|
||||
nnoremap <buffer> gww :OrgTableAlignW<CR>
|
||||
"nnoremap <silent><buffer> <A-Left> <Plug>OrgTableMoveColumnLeft
|
||||
nnoremap <silent><script><buffer>
|
||||
\ <Plug>OrgTableMoveColumnLeft :OrgTableMoveColumnLeft<CR>
|
||||
"nnoremap <silent><buffer> <A-Right> <Plug>OrgTableMoveColumnRight
|
||||
nnoremap <silent><script><buffer>
|
||||
\ <Plug>OrgTableMoveColumnRight :OrgTableMoveColumnRight<CR>
|
||||
" -------------------------------------
|
||||
|
||||
imap <silent> <buffer> <s-c-CR> <c-r>=OrgNewHead('levelup',1)<CR>
|
||||
imap <silent> <buffer> <c-CR> <c-r>=OrgNewHead('leveldown',1)<CR>
|
||||
imap <silent> <buffer> <s-CR> <c-r>=OrgNewHead('same',1)<CR>
|
||||
nnoremap <silent> <buffer> <s-c-CR> :call OrgNewHead('levelup')<CR>
|
||||
nnoremap <silent> <buffer> <c-CR> :call OrgNewHead('leveldown')<CR>
|
||||
nnoremap <silent> <buffer> <CR> :call OrgEnterFunc()<CR>
|
||||
nnoremap <silent> <buffer> <c-left> :call OrgShowLess(line("."))<CR>
|
||||
nnoremap <silent> <buffer> <c-right> :call OrgShowMore(line("."))<CR>
|
||||
nnoremap <silent> <buffer> <c-a-left> :call OrgMoveLevel(line("."),'left')<CR>
|
||||
nnoremap <silent> <buffer> <c-a-right> :call OrgMoveLevel(line("."),'right')<CR>
|
||||
nnoremap <silent> <buffer> <c-a-up> :<C-U>call OrgMoveLevel(line("."),'up',v:count1)<CR>
|
||||
nnoremap <silent> <buffer> <c-a-down> :<C-U>call OrgMoveLevel(line("."),'down',v:count1)<CR>
|
||||
nnoremap <silent> <buffer> <a-end> :call OrgNavigateLevels("end")<CR>
|
||||
nnoremap <silent> <buffer> <a-home> :call OrgNavigateLevels("home")<CR>
|
||||
nnoremap <silent> <buffer> <a-up> :call OrgNavigateLevels("up")<CR>
|
||||
nnoremap <silent> <buffer> <a-down> :call OrgNavigateLevels("down")<CR>
|
||||
nnoremap <silent> <buffer> <a-left> :call OrgNavigateLevels("left")<CR>
|
||||
nnoremap <silent> <buffer> <a-right> :call OrgNavigateLevels("right")<CR>
|
||||
nnoremap <silent> <buffer> <localleader>le :call EditLink()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>lf :call FollowLink(OrgGetLink())<cr>
|
||||
nnoremap <silent> <buffer> <localleader>ln :/]]<cr>
|
||||
nnoremap <silent> <buffer> <localleader>lp :?]]<cr>
|
||||
nnoremap <silent> <buffer> <localleader>lc :set conceallevel=3\|set concealcursor=nc<cr>
|
||||
nnoremap <silent> <buffer> <localleader>la :set conceallevel=3\|set concealcursor=c<cr>
|
||||
nnoremap <silent> <buffer> <localleader>lx :set conceallevel=0<cr>
|
||||
"nnoremap <silent> <buffer> <localleader>,e :call OrgSingleHeadingText("expand")<CR>
|
||||
"nnoremap <silent> <buffer> <localleader>,E :call OrgBodyTextOperation(1,line("$"),"expand")<CR>
|
||||
"nnoremap <silent> <buffer> <localleader>,C :call OrgBodyTextOperation(1,line("$"),"collapse")<CR>
|
||||
"nnoremap <silent> <buffer> <localleader>,c :call OrgSingleHeadingText("collapse")<CR>
|
||||
nnoremap <silent> <buffer> zc :call OrgDoSingleFold(line("."))<CR>
|
||||
|
||||
" below are alternate mappings for terminals, which
|
||||
" don't support some of the above key combinations
|
||||
nnoremap <silent> <buffer> ,<tab> :call OrgGlobalCycle()<cr>
|
||||
nnoremap <silent> <buffer> <localleader>zu :call OrgNavigateLevels("up")<CR>
|
||||
nnoremap <silent> <buffer> <localleader>zd :call OrgNavigateLevels("down")<CR>
|
||||
nnoremap <silent> <buffer> <localleader>zl :call OrgNavigateLevels("left")<CR>
|
||||
nnoremap <silent> <buffer> <localleader>zr :call OrgNavigateLevels("right")<CR>
|
||||
nnoremap <silent> <buffer> <localleader>zL :call OrgMoveLevel(line("."),'left')<CR>
|
||||
nnoremap <silent> <buffer> <localleader>zR :call OrgMoveLevel(line("."),'right')<CR>
|
||||
nnoremap <silent> <buffer> <localleader>k :<c-u>call OrgMoveLevel(line("."),'up',v:count1)<CR>
|
||||
nnoremap <silent> <buffer> <localleader>j :<c-u>call OrgMoveLevel(line("."),'down',v:count1)<CR>
|
||||
nnoremap <silent> <buffer> <localleader>np :call OrgNewHead('levelup')<CR>
|
||||
nnoremap <silent> <buffer> <localleader>ns :call OrgNewHead('leveldown')<CR>
|
|
@ -0,0 +1,262 @@
|
|||
" org.vim - VimOrganizer plugin for Vim
|
||||
" -------------------------------------------------------------
|
||||
" Version: 0.30
|
||||
" Maintainer: Herbert Sitz <hesitz@gmail.com>
|
||||
" Last Change: 2011 Nov 02
|
||||
"
|
||||
" Script: http://www.vim.org/scripts/script.php?script_id=3342
|
||||
" Github page: http://github.com/hsitz/VimOrganizer
|
||||
" Copyright: (c) 2010, 2011 by Herbert Sitz
|
||||
" The VIM LICENSE applies to all files in the
|
||||
" VimOrganizer plugin.
|
||||
" (See the Vim copyright except read "VimOrganizer"
|
||||
" in places where that copyright refers to "Vim".)
|
||||
" http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
|
||||
" No warranty, express or implied.
|
||||
" *** *** Use At-Your-Own-Risk *** ***
|
||||
|
||||
" set indent of text lines beyond heading's left column
|
||||
" 0 -- have text lines flush with their heading's left col
|
||||
if !exists("g:org_indent_from_head")
|
||||
let g:org_indent_from_head = 0
|
||||
|
||||
endif
|
||||
|
||||
if exists("b:did_indent") | finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
|
||||
setlocal indentexpr=GetOrgIndent()
|
||||
setlocal nolisp
|
||||
setlocal nosmartindent
|
||||
setlocal autoindent
|
||||
"setlocal indentkeys+=},=\\item,=\\bibitem
|
||||
|
||||
|
||||
" Only define the function once
|
||||
"if exists("GetOrgIndent") | finish
|
||||
"endif
|
||||
|
||||
|
||||
|
||||
function! GetOrgIndent(...)
|
||||
" Find a non-blank line above the current line.
|
||||
"let lnum = prevnonblank(v:lnum - 1)
|
||||
let lnum = PrevNonBlank(v:lnum - 1)
|
||||
|
||||
" At the start of the file use zero indent.
|
||||
if lnum == 0 | return 0
|
||||
endif
|
||||
|
||||
let curline = getline(v:lnum) " current line
|
||||
"let lminusone = getline(v:lnum-1)
|
||||
"if b:v.last_lnum > 0) && (curline !~ '^\s*$')
|
||||
" let lnum = b:v.last_lnum
|
||||
" let b:v.last_lnum = 0
|
||||
" endif
|
||||
let ind = indent(lnum)
|
||||
|
||||
if b:v.suppress_list_indent == 1
|
||||
let prevline = getline(lnum) " previous line
|
||||
else
|
||||
let prevline = getline(prevnonblank(v:lnum-1))
|
||||
endif
|
||||
|
||||
if (curline =~ '^\s*$') && (b:v.suppress_list_indent == 1)
|
||||
let b:v.suppress_list_indent = 0
|
||||
let b:v.org_list_offset=0
|
||||
endif
|
||||
|
||||
if (curline =~ '^\*\+ ')
|
||||
let ind = 0
|
||||
" below lines are failsafes, hopefully redundant
|
||||
let b:v.suppress_list_indent=0
|
||||
let b:v.suppress_indent=0
|
||||
elseif curline =~ '#+begin_'
|
||||
let b:v.suppress_indent=1
|
||||
let ind = 0
|
||||
elseif curline =~ '#+end_'
|
||||
let b:v.suppress_indent=0
|
||||
let ind = 0
|
||||
elseif curline =~ '^#+'
|
||||
let ind = 0
|
||||
"elseif (curline =~ '^\s*$') && (b:v.suppress_list_indent == 1)
|
||||
" \ && (len(synstack(v:lnum-1,1))>0)
|
||||
" \ && (synIDattr(synstack(v:lnum-1,1)[0],'name') == 'orgList')
|
||||
" let b:v.suppress_list_indent = 0
|
||||
elseif b:v.suppress_indent == 1
|
||||
return indent(curline)
|
||||
elseif b:v.suppress_list_indent == 1
|
||||
return len(matchstr(curline,'^\s*')) + b:v.org_list_offset
|
||||
elseif (curline =~ '^\s*\(\d\+[.):]\|[-+] \)')
|
||||
let before_ind = len(matchstr(curline,'^\s*'))
|
||||
"let ind= ind
|
||||
let b:v.org_list_offset = ind - before_ind
|
||||
let b:v.suppress_list_indent = 1
|
||||
elseif (curline =~'^\s*\d\+[).:]\s\+\S') || (curline =~'^\s*[-+\*]\s\+\S')
|
||||
" if len(curline)>0
|
||||
let ind = indent(curline)
|
||||
" endif
|
||||
elseif prevline =~ '^\*\+ '
|
||||
let ind = len(matchstr(prevline,'^\*\+ ')) + g:org_indent_from_head
|
||||
elseif prevline =~ '^\s*\d\+[).\]:]\s\+\S'
|
||||
let ind = ind + len(matchstr(prevline,'^\s*\zs\d\+[).\]:]\s\+\ze\S'))
|
||||
elseif prevline =~ '^\s*[-+\*]\s\+\S'
|
||||
let ind = ind + len(matchstr(prevline,'^\s*\zs[-+\*]\s\+\ze\S'))
|
||||
elseif (len(synstack(v:lnum,1))>0) && (synIDattr(synstack(v:lnum,1)[0],'name') == 'orgList')
|
||||
let ind = len(matchstr(getline(v:lnum-1),'^\s*'))
|
||||
endif
|
||||
|
||||
return ind
|
||||
endfunction
|
||||
|
||||
function! PrevNonBlank(line)
|
||||
let line = prevnonblank(a:line)
|
||||
|
||||
if (len(synstack(line,1))>0) && (synIDattr(synstack(line,1)[0],'name') == 'orgLisp')
|
||||
execute line + 1
|
||||
let line = search('^#+begin_src','nb')-1
|
||||
elseif (len(synstack(line-1,1))>0) && (synIDattr(synstack(line-1,1)[0],'name') == 'orgList')
|
||||
execute line - 1
|
||||
let line = search('^\s*$','nb')-1
|
||||
|
||||
endif
|
||||
return prevnonblank(line)
|
||||
endfunction
|
||||
|
||||
function! GetTestIndent2(lnum)
|
||||
" Find a non-blank line above the current line.
|
||||
"let lnum = prevnonblank(a:lnum - 1)
|
||||
let lnum = PrevNonBlank(a:lnum - 1)
|
||||
|
||||
" At the start of the file use zero indent.
|
||||
if lnum == 0 | return 0
|
||||
endif
|
||||
|
||||
let curline = getline(a:lnum) " current line
|
||||
"let lminusone = getline(a:lnum-1)
|
||||
"if b:v.last_lnum > 0) && (curline !~ '^\s*$')
|
||||
" let lnum = b:v.last_lnum
|
||||
" let b:v.last_lnum = 0
|
||||
" endif
|
||||
let ind = indent(lnum)
|
||||
|
||||
if b:v.suppress_list_indent == 1
|
||||
let prevline = getline(lnum) " previous line
|
||||
else
|
||||
let prevline = getline(prevnonblank(a:lnum-1))
|
||||
endif
|
||||
|
||||
if (curline =~ '^\s*$') && (b:v.suppress_list_indent == 1)
|
||||
let b:v.suppress_list_indent = 0
|
||||
let b:v.org_list_offset=0
|
||||
endif
|
||||
|
||||
if (curline =~ '^\*\+ ')
|
||||
let ind = 0
|
||||
" below lines are failsafes, hopefully redundant
|
||||
let b:v.suppress_list_indent=0
|
||||
let b:v.suppress_indent=0
|
||||
elseif curline =~ '#+begin_'
|
||||
let b:v.suppress_indent=1
|
||||
let ind = 0
|
||||
elseif curline =~ '#+end_'
|
||||
let b:v.suppress_indent=0
|
||||
let ind = 0
|
||||
"elseif (curline =~ '^\s*$') && (b:v.suppress_list_indent == 1)
|
||||
" \ && (len(synstack(a:lnum-1,1))>0)
|
||||
" \ && (synIDattr(synstack(a:lnum-1,1)[0],'name') == 'orgList')
|
||||
" let b:v.suppress_list_indent = 0
|
||||
elseif b:v.suppress_indent == 1
|
||||
return indent(curline)
|
||||
elseif b:v.suppress_list_indent == 1
|
||||
return len(matchstr(curline,'^\s*')) + b:v.org_list_offset
|
||||
elseif (curline =~ '^\s*\(\d\+[.):]\|[-+] \)')
|
||||
let before_ind = len(matchstr(curline,'^\s*'))
|
||||
"let ind= ind
|
||||
let b:v.org_list_offset = ind - before_ind
|
||||
let b:v.suppress_list_indent = 1
|
||||
elseif (curline =~'^\s*\d\+[).:]\s\+\S') || (curline =~'^\s*[-+\*]\s\+\S')
|
||||
" if len(curline)>0
|
||||
let ind = indent(curline)
|
||||
" endif
|
||||
elseif prevline =~ '^\*\+ '
|
||||
let ind = len(matchstr(prevline,'^\*\+ ')) + g:org_indent_from_head
|
||||
elseif prevline =~ '^\s*\d\+[).\]:]\s\+\S'
|
||||
let ind = ind + len(matchstr(prevline,'^\s*\zs\d\+[).\]:]\s\+\ze\S'))
|
||||
elseif prevline =~ '^\s*[-+\*]\s\+\S'
|
||||
let ind = ind + len(matchstr(prevline,'^\s*\zs[-+\*]\s\+\ze\S'))
|
||||
elseif (len(synstack(a:lnum,1))>0) && (synIDattr(synstack(a:lnum,1)[0],'name') == 'orgList')
|
||||
let ind = len(matchstr(getline(a:lnum-1),'^\s*'))
|
||||
endif
|
||||
|
||||
return ind
|
||||
endfunction
|
||||
|
||||
function! GetTestIndent(lnum)
|
||||
" Find a non-blank line above the current line.
|
||||
"let lnum = prevnonblank(a:lnum - 1)
|
||||
let lnum = PrevNonBlank(a:lnum - 1)
|
||||
|
||||
" At the start of the file use zero indent.
|
||||
if lnum == 0 | return 0
|
||||
endif
|
||||
|
||||
let curline = getline(a:lnum) " current line
|
||||
"let lminusone = getline(a:lnum-1)
|
||||
"if b:v.last_lnum > 0) && (curline !~ '^\s*$')
|
||||
" let lnum = b:v.last_lnum
|
||||
" let b:v.last_lnum = 0
|
||||
" endif
|
||||
let ind = indent(lnum)
|
||||
if b:v.suppress_list_indent == 1
|
||||
let prevline = getline(lnum) " previous line
|
||||
else
|
||||
let prevline = getline(prevnonblank(v:lnum-1))
|
||||
endif
|
||||
|
||||
if (curline =~ '^\s*$') && (b:v.suppress_list_indent == 1)
|
||||
let b:v.suppress_list_indent = 0
|
||||
let b:v.org_list_offset=0
|
||||
endif
|
||||
|
||||
if (curline =~ '^\*\+ ')
|
||||
let ind = 0
|
||||
" below lines are failsafes, hopefully redundant
|
||||
let b:v.suppress_list_indent=0
|
||||
let b:v.suppress_indent=0
|
||||
elseif curline =~ '#+begin_'
|
||||
let b:v.suppress_indent=1
|
||||
let ind = 0
|
||||
elseif curline =~ '#+end_'
|
||||
let b:v.suppress_indent=0
|
||||
let ind = 0
|
||||
"elseif (curline =~ '^\s*$') && (b:v.suppress_list_indent == 1)
|
||||
" \ && (len(synstack(a:lnum-1,1))>0)
|
||||
" \ && (synIDattr(synstack(a:lnum-1,1)[0],'name') == 'orgList')
|
||||
" let b:v.suppress_list_indent = 0
|
||||
elseif b:v.suppress_indent == 1
|
||||
return indent(curline)
|
||||
elseif b:v.suppress_list_indent == 1
|
||||
return len(matchstr(curline,'^\s*')) + b:v.org_list_offset
|
||||
elseif (curline =~ '^\s*\(\d\+[.):]\|[-+] \)')
|
||||
let before_ind = len(matchstr(curline,'^\s*'))
|
||||
"let ind= ind
|
||||
let b:v.org_list_offset = ind - before_ind
|
||||
let b:v.suppress_list_indent = 1
|
||||
elseif (curline =~'^\s*\d\+[).:]\s\+\S') || (curline =~'^\s*[-+\*]\s\+\S')
|
||||
" if len(curline)>0
|
||||
let ind = indent(curline)
|
||||
" endif
|
||||
elseif prevline =~ '^\*\+ '
|
||||
let ind = len(matchstr(prevline,'^\*\+ ')) + g:org_indent_from_head
|
||||
elseif prevline =~ '^\s*\d\+[).\]:]\s\+\S'
|
||||
let ind = ind + len(matchstr(prevline,'^\s*\zs\d\+[).\]:]\s\+\ze\S'))
|
||||
elseif prevline =~ '^\s*[-+\*]\s\+\S'
|
||||
let ind = ind + len(matchstr(prevline,'^\s*\zs[-+\*]\s\+\ze\S'))
|
||||
endif
|
||||
|
||||
return ind
|
||||
endfunction
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
VimOrganizer version 0.30, November 2, 2011. Requires Vim version that
|
||||
is compiled with support for folding and tabs. Conceal will
|
||||
be taken advantage of if working with Vim73 supporting conceal.
|
||||
(Also, I STRONGLY suggest that you apply a patch to Vim so that
|
||||
folded headings can have level-dependent highlighting,
|
||||
patch for Vim73 is in contrib directory of the download. If you're on
|
||||
Windows contact me and I should be able to provide you with an
|
||||
executable. If I hadn't been able to make Vim do this I would have
|
||||
bitten the bullet and moved to Emacs, as much as I hate editing in Emacs.)
|
||||
|
||||
VimOrganizer is a Vim filetype plugin that attempts to clone Emacs' Org-mode.
|
||||
It is currently (November 2011) in an alpha-stage, both in terms of (1) the
|
||||
breadth and depth of Org-mode features it clones and (2) the stability of its
|
||||
operation. It is nevertheless very usable.
|
||||
|
||||
Some of the ADDITIONS AND IMPROVEMENTS since previous (December 2010) version:
|
||||
-- Adjusts to any colorscheme
|
||||
-- Org menu in gvim.
|
||||
-- "Dashboards" to assist with Date entry, Columns, Tables,
|
||||
Agenda searches, and exporting.
|
||||
-- VimOrganizer help file to install in Vim.
|
||||
-- Better compatibility with Org-mode files. Open, edit, and save same
|
||||
files in Org-mode and/or VimOrganizer with (some) of the functionality and
|
||||
configuration-specific options of Org-mode supported in VimOrganizer.
|
||||
-- Support for Org-mode style links (as well as use of 'Conceal' in Vim73
|
||||
to hide link brackets and
|
||||
descriptions)
|
||||
-- Easy to use Org-like column mode, including column headings,
|
||||
inherited columns, support for Org column blocks, and ability to
|
||||
specify a list of custom column specs to apply in any buffer.
|
||||
-- Org-like narrowing of code blocks and subtrees
|
||||
-- Support for Org-like specifications of TODOS, tags, dates,
|
||||
including support for Org-compatible config lines in a file.
|
||||
-- Support for Org-like CATEGORIES, both in specification and in
|
||||
their inherited behavior.
|
||||
-- Search specification in Agenda searches is now nearly identical
|
||||
to specification of searches in Org-mode.
|
||||
-- User can specify list of commonly used custom agenda searches.
|
||||
-- Clockin, clockout, and (when a running Emacs server is available,
|
||||
clocktable block creation and updates.
|
||||
-- Org-like "refiling"
|
||||
-- Easy creation and editing of tables, as well as (when a running Emacs
|
||||
server is available) manipulation and evaluation of tables, including
|
||||
all spreadsheet functionality in Org-mode.
|
||||
-- "Live" block evaluation (when a running Emacs server is available)
|
||||
-- Support for nearly all the export types and export options
|
||||
available in Org-mode (when running Emacs server is available)
|
||||
-- Call out to an Emacs server to do "tangling" (literate programming).
|
||||
-- Many bug fixes and small improvements
|
||||
|
||||
Org-mode, and thus VimOrganizer, is a text-editor plugin/application that can
|
||||
be used for (1) keeping notes, (2) maintaining TODO lists, (3) planning
|
||||
projects, and/or (4) authoring and publishing documents, including support for
|
||||
literate programming and "reproducible research". Like Org-mode, VimOrganizer
|
||||
does this by implementing a flexible plain-text system with a lightly
|
||||
structured document format. Org-mode has been in constant development for
|
||||
seven or eight years, and continues to be developed. Work on VimOrganizer is
|
||||
likewise ongoing, but VimOrganizer is at present a smaller and less ambitious
|
||||
project than Org-mode.
|
||||
|
||||
File formats and basic workflows for VimOrganizer and Org-mode are very
|
||||
similar (files auto-convert as part of loading process) and VimOrganizer
|
||||
actually calls out to an Emacs' Org-mode server to
|
||||
implement important features, e.g., exporting to pdf format for printing.
|
||||
|
||||
Thus, to make full use of VimOrganizer you will want to have an Emacs'
|
||||
server running alongside. In most cases this requires little knowledge of
|
||||
Emacs other than how to start it up and add a few lines to the '.emacs' file,
|
||||
Emacs' counterpart to Vim's '.vimrc'. (You can even edit the .emacs file in
|
||||
Vim.) VimOrganizer is focused on leveraging Org-mode by accessing it via
|
||||
an Emacs server, and re-implementing in Vim only what is necessary and makes
|
||||
sense.
|
||||
|
||||
VimOrganizer also lets Vim users access Org-babel, a subproject of
|
||||
Org-mode that allows execution of source-code blocks in org-format
|
||||
documents. Uses for Org-babel range from writing technical research papers to
|
||||
simply using a VimOrganizer document as a "language-scratchpad". Over
|
||||
twenty languages are supported, including C, R, Lisp, Python, Perl, Ruby,
|
||||
and others. VimOrganizer calls out to a running Emacs server for Org-babel
|
||||
processing; functionality and speed are essentially the same as
|
||||
when editing with Org-mode in Emacs.
|
||||
|
||||
VimOrganizer has a first draft of a Vim help file, but the best first step in
|
||||
learning about VimOrganizer is to learn about Emacs' Org-mode. VimOrganizer
|
||||
uses the same basic concepts but implements them within the context of Vim
|
||||
(and with a reduced feature set). Org-mode's main documentation and
|
||||
support newsgroup are found here:
|
||||
Org-mode Main Manual: http://orgmode.org/manual/index.html
|
||||
Org-mode Compact Guide: http://orgmode.org/guide/index.html
|
||||
Org-mode support: http://news.gmane.org/gmane.emacs.orgmode
|
||||
Org-babel information: http://orgmode.org/worg/org-contrib/babel/
|
||||
|
||||
VimOrganizer help can be found here:
|
||||
https://github.com/hsitz/VimOrganizer/blob/master/doc/vimorg.txt
|
||||
|
||||
==========================
|
||||
INSTALLATION INSTRUCTIONS
|
||||
===========================
|
||||
https://github.com/hsitz/VimOrganizer/blob/master/INSTALL.txt
|
||||
|
||||
|
||||
QUESTIONS, COMMENTS, SUGGESTIONS
|
||||
================================
|
||||
Questions, comments, and suggestions regarding VimOrganizer are always
|
||||
appreciated. The preferred place for those is in the VimOrganizer newsgroup
|
||||
here:
|
||||
http://groups.google.com/group/vimorganizer/topics
|
||||
|
||||
VimOrganizer project files are maintained at github and the version
|
||||
there may be more recent than the files at vim.org:
|
||||
https://github.com/hsitz/VimOrganizer
|
||||
|
||||
----------------------------------------------------------------
|
||||
NOTE: some code from other Vim plugins has been incorporated into the
|
||||
VimOrganizer script files. Do NOT download these plugins to use them
|
||||
with VimOrganizer; since VimOrganizer does not call out to them in any way:
|
||||
|
||||
1. Charles Campbell's great calendar utilities
|
||||
2. Table editing routines from Maxim Kim's excellent vimwiki plugin.
|
||||
These are really quite nice (seem to be inspired by Org-mode's
|
||||
own table-editing stuff) and deserve to be offered as a separate
|
||||
plugin of their own, not dependent on any larger project. (If
|
||||
VimOrganizer is not quite the sort of plugin you're looking for then
|
||||
vimwiki may be.)
|
||||
----------------------------------------------------------------
|
||||
|
||||
VimOrganizer page at vim.org:
|
||||
http://www.vim.org/scripts/script.php?script_id=3342
|
||||
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
" org.vim - VimOrganizer plugin for Vim
|
||||
" -------------------------------------------------------------
|
||||
" Version: 0.30
|
||||
" Maintainer: Herbert Sitz <hesitz@gmail.com>
|
||||
" Last Change: 2011 Nov 02
|
||||
"
|
||||
" Script: http://www.vim.org/scripts/script.php?script_id=3342
|
||||
" Github page: http://github.com/hsitz/VimOrganizer
|
||||
" Copyright: (c) 2010, 2011 by Herbert Sitz
|
||||
" The VIM LICENSE applies to all files in the
|
||||
" VimOrganizer plugin.
|
||||
" (See the Vim copyright except read "VimOrganizer"
|
||||
" in places where that copyright refers to "Vim".)
|
||||
" http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
|
||||
" No warranty, express or implied.
|
||||
" *** *** Use At-Your-Own-Risk *** ***
|
||||
|
||||
" THIS FUNC is only for variable stars per level, currently
|
||||
" not exposed to users
|
||||
function! s:SynStars(perlevel)
|
||||
let b:levelstars = a:perlevel
|
||||
exe 'syntax match OL1 +^\(*\)\{1}\s.*+ contains=stars'
|
||||
exe 'syntax match OL2 +^\(*\)\{'.( 1 + 1*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL3 +^\(*\)\{'.(1 + 2*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL4 +^\(*\)\{'.(1 + 3*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL5 +^\(*\)\{'.(1 + 4*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL6 +^\(*\)\{'.(1 + 5*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL7 +^\(*\)\{'.(1 + 6*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL8 +^\(*\)\{'.(1 + 7*a:perlevel).'}\s.*+ contains=stars'
|
||||
exe 'syntax match OL9 +^\(*\)\{'.(1 + 8*a:perlevel).'}\s.*+ contains=stars'
|
||||
endfunction
|
||||
command! ChangeSyn call <SID>SynStars(b:levelstars)
|
||||
|
||||
|
||||
syntax match Org_Property_Value +^\s*:\S*:\ze.*+
|
||||
|
||||
syntax match Org_Tag +\s*:\S*:$+
|
||||
syntax match Org_Drawer +^\s*:\(PROPERTIES\|LOGBOOK\|END\):\ze.*+
|
||||
syntax match Org_Date +[<[]\d\d\d\d-\d\d-\d\d.\{-1,}[\]>]+
|
||||
syntax match Org_Star +\*\+\*+me=e-1 contained
|
||||
syntax match Org_Table +^\s*|.\+|\s*$+
|
||||
"syntax match NEXT '\* \zsNEXT' containedin=OL1,OL2,OL3,OL4,OL5,OL6
|
||||
"syntax match CANCELED '\* \zsCANCELED' containedin=OL1,OL2,OL3,OL4,OL5,OL6
|
||||
"syntax match TODO '\* \zsTODO' containedin=OL1,OL2,OL3,OL4,OL5,OL6
|
||||
"syntax match STARTED '\* \zsSTARTED' containedin=OL1,OL2,OL3,OL4,OL5,OL6
|
||||
"syntax match DONE '\* \zsDONE' containedin=OL1,OL2,OL3,OL4,OL5,OL6
|
||||
|
||||
syntax match Org_Config_Line '^#+.*' containedin=Org_Block,Org_Src_Block
|
||||
syntax region Org_Block start='\c^#+begin.*$' end='\c^#+end.*' keepend contains=Org_Config_Line
|
||||
syntax region Org_Src_Block start='\c^#+begin_src.*$' end='\c^#+end.*' keepend contains=Org_Config_Line
|
||||
|
||||
syntax match OL1 +^\(*\)\{1}\s.*+ contains=stars
|
||||
syntax match OL2 +^\(*\)\{2}\s.*+ contains=stars
|
||||
syntax match OL3 +^\(*\)\{3}\s.*+ contains=stars
|
||||
syntax match OL4 +^\(*\)\{4}\s.*+ contains=stars
|
||||
syntax match OL5 +^\(*\)\{5}\s.*+ contains=stars
|
||||
syntax match OL6 +^\(*\)\{6}\s.*+ contains=stars
|
||||
syntax match OL7 +^\(*\)\{7}\s.*+ contains=stars
|
||||
syntax match OL8 +^\(*\)\{8}\s.*+ contains=stars
|
||||
syntax match OL9 +^\(*\)\{9}\s.*+ contains=stars
|
||||
|
||||
" character highlights
|
||||
syn match Org_Code '=\S.\{-}\S='
|
||||
syn match Org_Itals '\(\_^\|\W\)/\zs\S[^/]\{-}\S\ze/\_W'
|
||||
syn match Org_Bold '\(\_^\|\W\)\*\zs\S[^*]\{-}\S\ze\*\_W'
|
||||
syn match Org_Underline '\(\_^\|\W\)_\zs\S[^_]\{-}\S\ze_\_W'
|
||||
syn match Org_Lnumber '^\t*\(\d\.\)*\s\s' contained
|
||||
|
||||
if has("conceal")
|
||||
syn region Org_Half_Link concealends matchgroup=linkends start='\[\[' end=']]' contains=FullLink
|
||||
syn region Org_Full_Link concealends matchgroup=linkends start='\[\[\(.\{-1,}\)]\[' end=']]'
|
||||
endif
|
||||
"exec "syntax match DONETODO '" . b:v.todoDoneMatch . "' containedin=OL1,OL2,OL3,OL4,OL5,OL6"
|
||||
"exec "syntax match NOTDONETODO '" . b:v.todoNotDoneMatch . "' containedin=OL1,OL2,OL3,OL4,OL5,OL6"
|
||||
|
||||
" ***********************************************
|
||||
" section below is example for having subregions
|
||||
" of code in an .org file that use syntax highlighting
|
||||
" for the language in the code block itself
|
||||
" not regular Org syntax highlighting.
|
||||
" See Emacs' Org documentation for some details:
|
||||
" http://orgmode.org/manual/Working-With-Source-Code.html#Working-With-Source-Code
|
||||
" Notice that much of the functionality of
|
||||
" source code blocks is for when they are exported or 'tangled'.
|
||||
" VimOrganizer calls out to an Emacs server for exports (and,
|
||||
" -- soon to come -- for tangling) so the functionality described
|
||||
" in the Emacs Org-mode docs already exists for VimOrganizer.
|
||||
"
|
||||
" The example below is for Lisp, other languages could be added
|
||||
" using same priciple. In addition to using context-sensitive
|
||||
" syntax highlighting for code blocks, VimOrganizer will
|
||||
" eventually use context-sensitive language indent-rules. . .
|
||||
" ************************************************"
|
||||
let b:current_syntax=''
|
||||
unlet b:current_syntax
|
||||
syntax include @Lispcode $VIMRUNTIME/syntax/lisp.vim
|
||||
syntax region orgLisp start='^#+begin_src/semacs-lisp' end='^#+end_src$' contains=@Lispcode
|
||||
let b:current_syntax = 'combined'
|
||||
hi orgLisp gui=bold
|
||||
|
||||
|
||||
" vim600: set foldmethod=marker foldlevel=0:
|
|
@ -0,0 +1,840 @@
|
|||
" Copyright (c) 1998-2006
|
||||
" Michael Sharpe <feline@irendi.com>
|
||||
"
|
||||
" We grant permission to use, copy modify, distribute, and sell this
|
||||
" software for any purpose without fee, provided that the above copyright
|
||||
" notice and this text are not removed. We make no guarantee about the
|
||||
" suitability of this software for any purpose and we are not liable
|
||||
" for any damages resulting from its use. Further, we are under no
|
||||
" obligation to maintain or extend this software. It is provided on an
|
||||
" "as is" basis without any expressed or implied warranty.
|
||||
|
||||
" Directory & regex enhancements added by Bindu Wavell who is well known on
|
||||
" vim.sf.net
|
||||
"
|
||||
" Patch for spaces in files/directories from Nathan Stien (also reported by
|
||||
" Soeren Sonnenburg)
|
||||
|
||||
" Do not load a.vim if is has already been loaded.
|
||||
if exists("loaded_alternateFile")
|
||||
finish
|
||||
endif
|
||||
if (v:progname == "ex")
|
||||
finish
|
||||
endif
|
||||
let loaded_alternateFile = 1
|
||||
|
||||
let alternateExtensionsDict = {}
|
||||
|
||||
" setup the default set of alternate extensions. The user can override in thier
|
||||
" .vimrc if the defaults are not suitable. To override in a .vimrc simply set a
|
||||
" g:alternateExtensions_<EXT> variable to a comma separated list of alternates,
|
||||
" where <EXT> is the extension to map.
|
||||
" E.g. let g:alternateExtensions_CPP = "inc,h,H,HPP,hpp"
|
||||
" let g:alternateExtensions_{'aspx.cs'} = "aspx"
|
||||
|
||||
|
||||
" This variable will be increased when an extension with greater number of dots
|
||||
" is added by the AddAlternateExtensionMapping call.
|
||||
let s:maxDotsInExtension = 1
|
||||
|
||||
" Function : AddAlternateExtensionMapping (PRIVATE)
|
||||
" Purpose : simple helper function to add the default alternate extension
|
||||
" mappings.
|
||||
" Args : extension -- the extension to map
|
||||
" alternates -- comma separated list of alternates extensions
|
||||
" Returns : nothing
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
function! <SID>AddAlternateExtensionMapping(extension, alternates)
|
||||
" This code does not actually work for variables like foo{'a.b.c.d.e'}
|
||||
"let varName = "g:alternateExtensions_" . a:extension
|
||||
"if (!exists(varName))
|
||||
" let g:alternateExtensions_{a:extension} = a:alternates
|
||||
"endif
|
||||
|
||||
" This code handles extensions which contains a dot. exists() fails with
|
||||
" such names.
|
||||
"let v:errmsg = ""
|
||||
" FIXME this line causes ex to return 1 instead of 0 for some reason??
|
||||
"silent! echo g:alternateExtensions_{a:extension}
|
||||
"if (v:errmsg != "")
|
||||
"let g:alternateExtensions_{a:extension} = a:alternates
|
||||
"endif
|
||||
|
||||
let g:alternateExtensionsDict[a:extension] = a:alternates
|
||||
let dotsNumber = strlen(substitute(a:extension, "[^.]", "", "g"))
|
||||
if s:maxDotsInExtension < dotsNumber
|
||||
let s:maxDotsInExtension = dotsNumber
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
" Add all the default extensions
|
||||
" Mappings for C and C++
|
||||
call <SID>AddAlternateExtensionMapping('h',"c,cpp,cxx,cc,CC")
|
||||
call <SID>AddAlternateExtensionMapping('H',"C,CPP,CXX,CC")
|
||||
call <SID>AddAlternateExtensionMapping('hpp',"cpp,c")
|
||||
call <SID>AddAlternateExtensionMapping('HPP',"CPP,C")
|
||||
call <SID>AddAlternateExtensionMapping('c',"h")
|
||||
call <SID>AddAlternateExtensionMapping('C',"H")
|
||||
call <SID>AddAlternateExtensionMapping('cpp',"h,hpp")
|
||||
call <SID>AddAlternateExtensionMapping('CPP',"H,HPP")
|
||||
call <SID>AddAlternateExtensionMapping('cc',"h")
|
||||
call <SID>AddAlternateExtensionMapping('CC',"H,h")
|
||||
call <SID>AddAlternateExtensionMapping('cxx',"h")
|
||||
call <SID>AddAlternateExtensionMapping('CXX',"H")
|
||||
" Mappings for PSL7
|
||||
call <SID>AddAlternateExtensionMapping('psl',"ph")
|
||||
call <SID>AddAlternateExtensionMapping('ph',"psl")
|
||||
" Mappings for ADA
|
||||
call <SID>AddAlternateExtensionMapping('adb',"ads")
|
||||
call <SID>AddAlternateExtensionMapping('ads',"adb")
|
||||
" Mappings for lex and yacc files
|
||||
call <SID>AddAlternateExtensionMapping('l',"y,yacc,ypp")
|
||||
call <SID>AddAlternateExtensionMapping('lex',"yacc,y,ypp")
|
||||
call <SID>AddAlternateExtensionMapping('lpp',"ypp,y,yacc")
|
||||
call <SID>AddAlternateExtensionMapping('y',"l,lex,lpp")
|
||||
call <SID>AddAlternateExtensionMapping('yacc',"lex,l,lpp")
|
||||
call <SID>AddAlternateExtensionMapping('ypp',"lpp,l,lex")
|
||||
" Mappings for OCaml
|
||||
call <SID>AddAlternateExtensionMapping('ml',"mli")
|
||||
call <SID>AddAlternateExtensionMapping('mli',"ml")
|
||||
" ASP stuff
|
||||
call <SID>AddAlternateExtensionMapping('aspx.cs', 'aspx')
|
||||
call <SID>AddAlternateExtensionMapping('aspx.vb', 'aspx')
|
||||
call <SID>AddAlternateExtensionMapping('aspx', 'aspx.cs,aspx.vb')
|
||||
|
||||
" Setup default search path, unless the user has specified
|
||||
" a path in their [._]vimrc.
|
||||
if (!exists('g:alternateSearchPath'))
|
||||
let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc'
|
||||
endif
|
||||
|
||||
" If this variable is true then a.vim will not alternate to a file/buffer which
|
||||
" does not exist. E.g while editing a.c and the :A will not swtich to a.h
|
||||
" unless it exists.
|
||||
if (!exists('g:alternateNoDefaultAlternate'))
|
||||
" by default a.vim will alternate to a file which does not exist
|
||||
let g:alternateNoDefaultAlternate = 0
|
||||
endif
|
||||
|
||||
" If this variable is true then a.vim will convert the alternate filename to a
|
||||
" filename relative to the current working directory.
|
||||
" Feature by Nathan Huizinga
|
||||
if (!exists('g:alternateRelativeFiles'))
|
||||
" by default a.vim will not convert the filename to one relative to the
|
||||
" current working directory
|
||||
let g:alternateRelativeFiles = 0
|
||||
endif
|
||||
|
||||
|
||||
" Function : GetNthItemFromList (PRIVATE)
|
||||
" Purpose : Support reading items from a comma seperated list
|
||||
" Used to iterate all the extensions in an extension spec
|
||||
" Used to iterate all path prefixes
|
||||
" Args : list -- the list (extension spec, file paths) to iterate
|
||||
" n -- the extension to get
|
||||
" Returns : the nth item (extension, path) from the list (extension
|
||||
" spec), or "" for failure
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
" History : Renamed from GetNthExtensionFromSpec to GetNthItemFromList
|
||||
" to reflect a more generic use of this function. -- Bindu
|
||||
function! <SID>GetNthItemFromList(list, n)
|
||||
let itemStart = 0
|
||||
let itemEnd = -1
|
||||
let pos = 0
|
||||
let item = ""
|
||||
let i = 0
|
||||
while (i != a:n)
|
||||
let itemStart = itemEnd + 1
|
||||
let itemEnd = match(a:list, ",", itemStart)
|
||||
let i = i + 1
|
||||
if (itemEnd == -1)
|
||||
if (i == a:n)
|
||||
let itemEnd = strlen(a:list)
|
||||
endif
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
if (itemEnd != -1)
|
||||
let item = strpart(a:list, itemStart, itemEnd - itemStart)
|
||||
endif
|
||||
return item
|
||||
endfunction
|
||||
|
||||
" Function : ExpandAlternatePath (PRIVATE)
|
||||
" Purpose : Expand path info. A path with a prefix of "wdr:" will be
|
||||
" treated as relative to the working directory (i.e. the
|
||||
" directory where vim was started.) A path prefix of "abs:" will
|
||||
" be treated as absolute. No prefix or "sfr:" will result in the
|
||||
" path being treated as relative to the source file (see sfPath
|
||||
" argument).
|
||||
"
|
||||
" A prefix of "reg:" will treat the pathSpec as a regular
|
||||
" expression substitution that is applied to the source file
|
||||
" path. The format is:
|
||||
"
|
||||
" reg:<sep><pattern><sep><subst><sep><flag><sep>
|
||||
"
|
||||
" <sep> seperator character, we often use one of [/|%#]
|
||||
" <pattern> is what you are looking for
|
||||
" <subst> is the output pattern
|
||||
" <flag> can be g for global replace or empty
|
||||
"
|
||||
" EXAMPLE: 'reg:/inc/src/g/' will replace every instance
|
||||
" of 'inc' with 'src' in the source file path. It is possible
|
||||
" to use match variables so you could do something like:
|
||||
" 'reg:|src/\([^/]*\)|inc/\1||' (see 'help :substitute',
|
||||
" 'help pattern' and 'help sub-replace-special' for more details
|
||||
"
|
||||
" NOTE: a.vim uses ',' (comma) internally so DON'T use it
|
||||
" in your regular expressions or other pathSpecs unless you update
|
||||
" the rest of the a.vim code to use some other seperator.
|
||||
"
|
||||
" Args : pathSpec -- path component (or substitution patterns)
|
||||
" sfPath -- source file path
|
||||
" Returns : a path that can be used by AlternateFile()
|
||||
" Author : Bindu Wavell <bindu@wavell.net>
|
||||
function! <SID>ExpandAlternatePath(pathSpec, sfPath)
|
||||
let prfx = strpart(a:pathSpec, 0, 4)
|
||||
if (prfx == "wdr:" || prfx == "abs:")
|
||||
let path = strpart(a:pathSpec, 4)
|
||||
elseif (prfx == "reg:")
|
||||
let re = strpart(a:pathSpec, 4)
|
||||
let sep = strpart(re, 0, 1)
|
||||
let patend = match(re, sep, 1)
|
||||
let pat = strpart(re, 1, patend - 1)
|
||||
let subend = match(re, sep, patend + 1)
|
||||
let sub = strpart(re, patend+1, subend - patend - 1)
|
||||
let flag = strpart(re, strlen(re) - 2)
|
||||
if (flag == sep)
|
||||
let flag = ''
|
||||
endif
|
||||
let path = substitute(a:sfPath, pat, sub, flag)
|
||||
"call confirm('PAT: [' . pat . '] SUB: [' . sub . ']')
|
||||
"call confirm(a:sfPath . ' => ' . path)
|
||||
else
|
||||
let path = a:pathSpec
|
||||
if (prfx == "sfr:")
|
||||
let path = strpart(path, 4)
|
||||
endif
|
||||
let path = a:sfPath . "/" . path
|
||||
endif
|
||||
return path
|
||||
endfunction
|
||||
|
||||
" Function : FindFileInSearchPath (PRIVATE)
|
||||
" Purpose : Searches for a file in the search path list
|
||||
" Args : filename -- name of the file to search for
|
||||
" pathList -- the path list to search
|
||||
" relPathBase -- the path which relative paths are expanded from
|
||||
" Returns : An expanded filename if found, the empty string otherwise
|
||||
" Author : Michael Sharpe (feline@irendi.com)
|
||||
" History : inline code written by Bindu Wavell originally
|
||||
function! <SID>FindFileInSearchPath(fileName, pathList, relPathBase)
|
||||
let filepath = ""
|
||||
let m = 1
|
||||
let pathListLen = strlen(a:pathList)
|
||||
if (pathListLen > 0)
|
||||
while (1)
|
||||
let pathSpec = <SID>GetNthItemFromList(a:pathList, m)
|
||||
if (pathSpec != "")
|
||||
let path = <SID>ExpandAlternatePath(pathSpec, a:relPathBase)
|
||||
let fullname = path . "/" . a:fileName
|
||||
let foundMatch = <SID>BufferOrFileExists(fullname)
|
||||
if (foundMatch)
|
||||
let filepath = fullname
|
||||
break
|
||||
endif
|
||||
else
|
||||
break
|
||||
endif
|
||||
let m = m + 1
|
||||
endwhile
|
||||
endif
|
||||
return filepath
|
||||
endfunction
|
||||
|
||||
" Function : FindFileInSearchPathEx (PRIVATE)
|
||||
" Purpose : Searches for a file in the search path list
|
||||
" Args : filename -- name of the file to search for
|
||||
" pathList -- the path list to search
|
||||
" relPathBase -- the path which relative paths are expanded from
|
||||
" count -- find the count'th occurence of the file on the path
|
||||
" Returns : An expanded filename if found, the empty string otherwise
|
||||
" Author : Michael Sharpe (feline@irendi.com)
|
||||
" History : Based on <SID>FindFileInSearchPath() but with extensions
|
||||
function! <SID>FindFileInSearchPathEx(fileName, pathList, relPathBase, count)
|
||||
let filepath = ""
|
||||
let m = 1
|
||||
let spath = ""
|
||||
let pathListLen = strlen(a:pathList)
|
||||
if (pathListLen > 0)
|
||||
while (1)
|
||||
let pathSpec = <SID>GetNthItemFromList(a:pathList, m)
|
||||
if (pathSpec != "")
|
||||
let path = <SID>ExpandAlternatePath(pathSpec, a:relPathBase)
|
||||
if (spath != "")
|
||||
let spath = spath . ','
|
||||
endif
|
||||
let spath = spath . path
|
||||
else
|
||||
break
|
||||
endif
|
||||
let m = m + 1
|
||||
endwhile
|
||||
endif
|
||||
|
||||
if (&path != "")
|
||||
if (spath != "")
|
||||
let spath = spath . ','
|
||||
endif
|
||||
let spath = spath . &path
|
||||
endif
|
||||
|
||||
let filepath = findfile(a:fileName, spath, a:count)
|
||||
return filepath
|
||||
endfunction
|
||||
|
||||
" Function : EnumerateFilesByExtension (PRIVATE)
|
||||
" Purpose : enumerates all files by a particular list of alternate extensions.
|
||||
" Args : path -- path of a file (not including the file)
|
||||
" baseName -- base name of the file to be expanded
|
||||
" extension -- extension whose alternates are to be enumerated
|
||||
" Returns : comma separated list of files with extensions
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
function! EnumerateFilesByExtension(path, baseName, extension)
|
||||
let enumeration = ""
|
||||
let extSpec = ""
|
||||
let v:errmsg = ""
|
||||
silent! echo g:alternateExtensions_{a:extension}
|
||||
if (v:errmsg == "")
|
||||
let extSpec = g:alternateExtensions_{a:extension}
|
||||
endif
|
||||
if (extSpec == "")
|
||||
if (has_key(g:alternateExtensionsDict, a:extension))
|
||||
let extSpec = g:alternateExtensionsDict[a:extension]
|
||||
endif
|
||||
endif
|
||||
if (extSpec != "")
|
||||
let n = 1
|
||||
let done = 0
|
||||
while (!done)
|
||||
let ext = <SID>GetNthItemFromList(extSpec, n)
|
||||
if (ext != "")
|
||||
if (a:path != "")
|
||||
let newFilename = a:path . "/" . a:baseName . "." . ext
|
||||
else
|
||||
let newFilename = a:baseName . "." . ext
|
||||
endif
|
||||
if (enumeration == "")
|
||||
let enumeration = newFilename
|
||||
else
|
||||
let enumeration = enumeration . "," . newFilename
|
||||
endif
|
||||
else
|
||||
let done = 1
|
||||
endif
|
||||
let n = n + 1
|
||||
endwhile
|
||||
endif
|
||||
return enumeration
|
||||
endfunction
|
||||
|
||||
" Function : EnumerateFilesByExtensionInPath (PRIVATE)
|
||||
" Purpose : enumerates all files by expanding the path list and the extension
|
||||
" list.
|
||||
" Args : baseName -- base name of the file
|
||||
" extension -- extension whose alternates are to be enumerated
|
||||
" pathList -- the list of paths to enumerate
|
||||
" relPath -- the path of the current file for expansion of relative
|
||||
" paths in the path list.
|
||||
" Returns : A comma separated list of paths with extensions
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
function! EnumerateFilesByExtensionInPath(baseName, extension, pathList, relPathBase)
|
||||
let enumeration = ""
|
||||
let filepath = ""
|
||||
let m = 1
|
||||
let pathListLen = strlen(a:pathList)
|
||||
if (pathListLen > 0)
|
||||
while (1)
|
||||
let pathSpec = <SID>GetNthItemFromList(a:pathList, m)
|
||||
if (pathSpec != "")
|
||||
let path = <SID>ExpandAlternatePath(pathSpec, a:relPathBase)
|
||||
let pe = EnumerateFilesByExtension(path, a:baseName, a:extension)
|
||||
if (enumeration == "")
|
||||
let enumeration = pe
|
||||
else
|
||||
let enumeration = enumeration . "," . pe
|
||||
endif
|
||||
else
|
||||
break
|
||||
endif
|
||||
let m = m + 1
|
||||
endwhile
|
||||
endif
|
||||
return enumeration
|
||||
endfunction
|
||||
|
||||
" Function : DetermineExtension (PRIVATE)
|
||||
" Purpose : Determines the extension of a filename based on the register
|
||||
" alternate extension. This allow extension which contain dots to
|
||||
" be considered. E.g. foo.aspx.cs to foo.aspx where an alternate
|
||||
" exists for the aspx.cs extension. Note that this will only accept
|
||||
" extensions which contain less than 5 dots. This is only
|
||||
" implemented in this manner for simplicity...it is doubtful that
|
||||
" this will be a restriction in non-contrived situations.
|
||||
" Args : The path to the file to find the extension in
|
||||
" Returns : The matched extension if any
|
||||
" Author : Michael Sharpe (feline@irendi.com)
|
||||
" History : idea from Tom-Erik Duestad
|
||||
" Notes : there is some magic occuring here. The exists() function does not
|
||||
" work well when the curly brace variable has dots in it. And why
|
||||
" should it, dots are not valid in variable names. But the exists
|
||||
" function is wierd too. Lets say foo_c does exist. Then
|
||||
" exists("foo_c.e.f") will be true...even though the variable does
|
||||
" not exist. However the curly brace variables do work when the
|
||||
" variable has dots in it. E.g foo_{'c'} is different from
|
||||
" foo_{'c.d.e'}...and foo_{'c'} is identical to foo_c and
|
||||
" foo_{'c.d.e'} is identical to foo_c.d.e right? Yes in the current
|
||||
" implementation of vim. To trick vim to test for existence of such
|
||||
" variables echo the curly brace variable and look for an error
|
||||
" message.
|
||||
function! DetermineExtension(path)
|
||||
let mods = ":t"
|
||||
let i = 0
|
||||
while i <= s:maxDotsInExtension
|
||||
let mods = mods . ":e"
|
||||
let extension = fnamemodify(a:path, mods)
|
||||
if (has_key(g:alternateExtensionsDict, extension))
|
||||
return extension
|
||||
endif
|
||||
let v:errmsg = ""
|
||||
silent! echo g:alternateExtensions_{extension}
|
||||
if (v:errmsg == "")
|
||||
return extension
|
||||
endif
|
||||
let i = i + 1
|
||||
endwhile
|
||||
return ""
|
||||
endfunction
|
||||
|
||||
" Function : AlternateFile (PUBLIC)
|
||||
" Purpose : Opens a new buffer by looking at the extension of the current
|
||||
" buffer and finding the corresponding file. E.g. foo.c <--> foo.h
|
||||
" Args : accepts one argument. If present it used the argument as the new
|
||||
" extension.
|
||||
" Returns : nothing
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
" History : + When an alternate can't be found in the same directory as the
|
||||
" source file, a search path will be traversed looking for the
|
||||
" alternates.
|
||||
" + Moved some code into a separate function, minor optimization
|
||||
" + rework to favor files in memory based on complete enumeration of
|
||||
" all files extensions and paths
|
||||
function! AlternateFile(splitWindow, ...)
|
||||
let extension = DetermineExtension(expand("%:p"))
|
||||
let baseName = substitute(expand("%:t"), "\." . extension . '$', "", "")
|
||||
let currentPath = expand("%:p:h")
|
||||
|
||||
if (a:0 != 0)
|
||||
let newFullname = currentPath . "/" . baseName . "." . a:1
|
||||
call <SID>FindOrCreateBuffer(newFullname, a:splitWindow, 0)
|
||||
else
|
||||
let allfiles = ""
|
||||
if (extension != "")
|
||||
let allfiles1 = EnumerateFilesByExtension(currentPath, baseName, extension)
|
||||
let allfiles2 = EnumerateFilesByExtensionInPath(baseName, extension, g:alternateSearchPath, currentPath)
|
||||
|
||||
if (allfiles1 != "")
|
||||
if (allfiles2 != "")
|
||||
let allfiles = allfiles1 . ',' . allfiles2
|
||||
else
|
||||
let allfiles = allfiles1
|
||||
endif
|
||||
else
|
||||
let allfiles = allfiles2
|
||||
endif
|
||||
endif
|
||||
|
||||
if (allfiles != "")
|
||||
let bestFile = ""
|
||||
let bestScore = 0
|
||||
let score = 0
|
||||
let n = 1
|
||||
|
||||
let onefile = <SID>GetNthItemFromList(allfiles, n)
|
||||
let bestFile = onefile
|
||||
while (onefile != "" && score < 2)
|
||||
let score = <SID>BufferOrFileExists(onefile)
|
||||
if (score > bestScore)
|
||||
let bestScore = score
|
||||
let bestFile = onefile
|
||||
endif
|
||||
let n = n + 1
|
||||
let onefile = <SID>GetNthItemFromList(allfiles, n)
|
||||
endwhile
|
||||
|
||||
if (bestScore == 0 && g:alternateNoDefaultAlternate == 1)
|
||||
echo "No existing alternate available"
|
||||
else
|
||||
call <SID>FindOrCreateBuffer(bestFile, a:splitWindow, 1)
|
||||
let b:AlternateAllFiles = allfiles
|
||||
endif
|
||||
else
|
||||
echo "No alternate file/buffer available"
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Function : AlternateOpenFileUnderCursor (PUBLIC)
|
||||
" Purpose : Opens file under the cursor
|
||||
" Args : splitWindow -- indicates how to open the file
|
||||
" Returns : Nothing
|
||||
" Author : Michael Sharpe (feline@irendi.com) www.irendi.com
|
||||
function! AlternateOpenFileUnderCursor(splitWindow,...)
|
||||
let cursorFile = (a:0 > 0) ? a:1 : expand("<cfile>")
|
||||
let currentPath = expand("%:p:h")
|
||||
let openCount = 1
|
||||
|
||||
let fileName = <SID>FindFileInSearchPathEx(cursorFile, g:alternateSearchPath, currentPath, openCount)
|
||||
if (fileName != "")
|
||||
call <SID>FindOrCreateBuffer(fileName, a:splitWindow, 1)
|
||||
let b:openCount = openCount
|
||||
let b:cursorFile = cursorFile
|
||||
let b:currentPath = currentPath
|
||||
else
|
||||
echo "Can't find file"
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Function : AlternateOpenNextFile (PUBLIC)
|
||||
" Purpose : Opens the next file corresponding to the search which found the
|
||||
" current file
|
||||
" Args : bang -- indicates what to do if the current file has not been
|
||||
" saved
|
||||
" Returns : nothing
|
||||
" Author : Michael Sharpe (feline@irendi.com) www.irendi.com
|
||||
function! AlternateOpenNextFile(bang)
|
||||
let cursorFile = ""
|
||||
if (exists("b:cursorFile"))
|
||||
let cursorFile = b:cursorFile
|
||||
endif
|
||||
|
||||
let currentPath = ""
|
||||
if (exists("b:currentPath"))
|
||||
let currentPath = b:currentPath
|
||||
endif
|
||||
|
||||
let openCount = 0
|
||||
if (exists("b:openCount"))
|
||||
let openCount = b:openCount + 1
|
||||
endif
|
||||
|
||||
if (cursorFile != "" && currentPath != "" && openCount != 0)
|
||||
let fileName = <SID>FindFileInSearchPathEx(cursorFile, g:alternateSearchPath, currentPath, openCount)
|
||||
if (fileName != "")
|
||||
call <SID>FindOrCreateBuffer(fileName, "n".a:bang, 0)
|
||||
let b:openCount = openCount
|
||||
let b:cursorFile = cursorFile
|
||||
let b:currentPath = currentPath
|
||||
else
|
||||
let fileName = <SID>FindFileInSearchPathEx(cursorFile, g:alternateSearchPath, currentPath, 1)
|
||||
if (fileName != "")
|
||||
call <SID>FindOrCreateBuffer(fileName, "n".a:bang, 0)
|
||||
let b:openCount = 1
|
||||
let b:cursorFile = cursorFile
|
||||
let b:currentPath = currentPath
|
||||
else
|
||||
echo "Can't find next file"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
comm! -nargs=? -bang IH call AlternateOpenFileUnderCursor("n<bang>", <f-args>)
|
||||
comm! -nargs=? -bang IHS call AlternateOpenFileUnderCursor("h<bang>", <f-args>)
|
||||
comm! -nargs=? -bang IHV call AlternateOpenFileUnderCursor("v<bang>", <f-args>)
|
||||
comm! -nargs=? -bang IHT call AlternateOpenFileUnderCursor("t<bang>", <f-args>)
|
||||
comm! -nargs=? -bang IHN call AlternateOpenNextFile("<bang>")
|
||||
imap <Leader>ih <ESC>:IHS<CR>
|
||||
nmap <Leader>ih :IHS<CR>
|
||||
imap <Leader>is <ESC>:IHS<CR>:A<CR>
|
||||
nmap <Leader>is :IHS<CR>:A<CR>
|
||||
imap <Leader>ihn <ESC>:IHN<CR>
|
||||
nmap <Leader>ihn :IHN<CR>
|
||||
|
||||
"function! <SID>PrintList(theList)
|
||||
" let n = 1
|
||||
" let oneFile = <SID>GetNthItemFromList(a:theList, n)
|
||||
" while (oneFile != "")
|
||||
" let n = n + 1
|
||||
" let oneFile = <SID>GetNthItemFromList(a:theList, n)
|
||||
" endwhile
|
||||
"endfunction
|
||||
|
||||
" Function : NextAlternate (PUBLIC)
|
||||
" Purpose : Used to cycle through any other alternate file which existed on
|
||||
" the search path.
|
||||
" Args : bang (IN) - used to implement the AN vs AN! functionality
|
||||
" Returns : nothing
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
function! NextAlternate(bang)
|
||||
if (exists('b:AlternateAllFiles'))
|
||||
let currentFile = expand("%")
|
||||
let n = 1
|
||||
let onefile = <SID>GetNthItemFromList(b:AlternateAllFiles, n)
|
||||
while (onefile != "" && !<SID>EqualFilePaths(fnamemodify(onefile,":p"), fnamemodify(currentFile,":p")))
|
||||
let n = n + 1
|
||||
let onefile = <SID>GetNthItemFromList(b:AlternateAllFiles, n)
|
||||
endwhile
|
||||
|
||||
if (onefile != "")
|
||||
let stop = n
|
||||
let n = n + 1
|
||||
let foundAlternate = 0
|
||||
let nextAlternate = ""
|
||||
while (n != stop)
|
||||
let nextAlternate = <SID>GetNthItemFromList(b:AlternateAllFiles, n)
|
||||
if (nextAlternate == "")
|
||||
let n = 1
|
||||
continue
|
||||
endif
|
||||
let n = n + 1
|
||||
if (<SID>EqualFilePaths(fnamemodify(nextAlternate, ":p"), fnamemodify(currentFile, ":p")))
|
||||
continue
|
||||
endif
|
||||
if (filereadable(nextAlternate))
|
||||
" on cygwin filereadable("foo.H") returns true if "foo.h" exists
|
||||
if (has("unix") && $WINDIR != "" && fnamemodify(nextAlternate, ":p") ==? fnamemodify(currentFile, ":p"))
|
||||
continue
|
||||
endif
|
||||
let foundAlternate = 1
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
if (foundAlternate == 1)
|
||||
let s:AlternateAllFiles = b:AlternateAllFiles
|
||||
"silent! execute ":e".a:bang." " . nextAlternate
|
||||
call <SID>FindOrCreateBuffer(nextAlternate, "n".a:bang, 0)
|
||||
let b:AlternateAllFiles = s:AlternateAllFiles
|
||||
else
|
||||
echo "Only this alternate file exists"
|
||||
endif
|
||||
else
|
||||
echo "Could not find current file in alternates list"
|
||||
endif
|
||||
else
|
||||
echo "No other alternate files exist"
|
||||
endif
|
||||
endfunction
|
||||
|
||||
comm! -nargs=? -bang A call AlternateFile("n<bang>", <f-args>)
|
||||
comm! -nargs=? -bang AS call AlternateFile("h<bang>", <f-args>)
|
||||
comm! -nargs=? -bang AV call AlternateFile("v<bang>", <f-args>)
|
||||
comm! -nargs=? -bang AT call AlternateFile("t<bang>", <f-args>)
|
||||
comm! -nargs=? -bang AN call NextAlternate("<bang>")
|
||||
|
||||
" Function : BufferOrFileExists (PRIVATE)
|
||||
" Purpose : determines if a buffer or a readable file exists
|
||||
" Args : fileName (IN) - name of the file to check
|
||||
" Returns : 2 if it exists in memory, 1 if it exists, 0 otherwise
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
" History : Updated code to handle buffernames using just the
|
||||
" filename and not the path.
|
||||
function! <SID>BufferOrFileExists(fileName)
|
||||
let result = 0
|
||||
|
||||
let lastBuffer = bufnr("$")
|
||||
let i = 1
|
||||
while i <= lastBuffer
|
||||
if <SID>EqualFilePaths(expand("#".i.":p"), a:fileName)
|
||||
let result = 2
|
||||
break
|
||||
endif
|
||||
let i = i + 1
|
||||
endwhile
|
||||
|
||||
if (!result)
|
||||
let bufName = fnamemodify(a:fileName,":t")
|
||||
let memBufName = bufname(bufName)
|
||||
if (memBufName != "")
|
||||
let memBufBasename = fnamemodify(memBufName, ":t")
|
||||
if (bufName == memBufBasename)
|
||||
let result = 2
|
||||
endif
|
||||
endif
|
||||
|
||||
if (!result)
|
||||
let result = bufexists(bufName) || bufexists(a:fileName) || filereadable(a:fileName)
|
||||
endif
|
||||
endif
|
||||
|
||||
if (!result)
|
||||
let result = filereadable(a:fileName)
|
||||
endif
|
||||
return result
|
||||
endfunction
|
||||
|
||||
" Function : FindOrCreateBuffer (PRIVATE)
|
||||
" Purpose : searches the buffer list (:ls) for the specified filename. If
|
||||
" found, checks the window list for the buffer. If the buffer is in
|
||||
" an already open window, it switches to the window. If the buffer
|
||||
" was not in a window, it switches to that buffer. If the buffer did
|
||||
" not exist, it creates it.
|
||||
" Args : filename (IN) -- the name of the file
|
||||
" doSplit (IN) -- indicates whether the window should be split
|
||||
" ("v", "h", "n", "v!", "h!", "n!", "t", "t!")
|
||||
" findSimilar (IN) -- indicate weather existing buffers should be
|
||||
" prefered
|
||||
" Returns : nothing
|
||||
" Author : Michael Sharpe <feline@irendi.com>
|
||||
" History : + bufname() was not working very well with the possibly strange
|
||||
" paths that can abound with the search path so updated this
|
||||
" slightly. -- Bindu
|
||||
" + updated window switching code to make it more efficient -- Bindu
|
||||
" Allow ! to be applied to buffer/split/editing commands for more
|
||||
" vim/vi like consistency
|
||||
" + implemented fix from Matt Perry
|
||||
function! <SID>FindOrCreateBuffer(fileName, doSplit, findSimilar)
|
||||
" Check to see if the buffer is already open before re-opening it.
|
||||
let FILENAME = escape(a:fileName, ' ')
|
||||
let bufNr = -1
|
||||
let lastBuffer = bufnr("$")
|
||||
let i = 1
|
||||
if (a:findSimilar)
|
||||
while i <= lastBuffer
|
||||
if <SID>EqualFilePaths(expand("#".i.":p"), a:fileName)
|
||||
let bufNr = i
|
||||
break
|
||||
endif
|
||||
let i = i + 1
|
||||
endwhile
|
||||
|
||||
if (bufNr == -1)
|
||||
let bufName = bufname(a:fileName)
|
||||
let bufFilename = fnamemodify(a:fileName,":t")
|
||||
|
||||
if (bufName == "")
|
||||
let bufName = bufname(bufFilename)
|
||||
endif
|
||||
|
||||
if (bufName != "")
|
||||
let tail = fnamemodify(bufName, ":t")
|
||||
if (tail != bufFilename)
|
||||
let bufName = ""
|
||||
endif
|
||||
endif
|
||||
if (bufName != "")
|
||||
let bufNr = bufnr(bufName)
|
||||
let FILENAME = bufName
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
if (g:alternateRelativeFiles == 1)
|
||||
let FILENAME = fnamemodify(FILENAME, ":p:.")
|
||||
endif
|
||||
|
||||
let splitType = a:doSplit[0]
|
||||
let bang = a:doSplit[1]
|
||||
if (bufNr == -1)
|
||||
" Buffer did not exist....create it
|
||||
let v:errmsg=""
|
||||
if (splitType == "h")
|
||||
silent! execute ":split".bang." " . FILENAME
|
||||
elseif (splitType == "v")
|
||||
silent! execute ":vsplit".bang." " . FILENAME
|
||||
elseif (splitType == "t")
|
||||
silent! execute ":tab split".bang." " . FILENAME
|
||||
else
|
||||
silent! execute ":e".bang." " . FILENAME
|
||||
endif
|
||||
if (v:errmsg != "")
|
||||
echo v:errmsg
|
||||
endif
|
||||
else
|
||||
|
||||
" Find the correct tab corresponding to the existing buffer
|
||||
let tabNr = -1
|
||||
" iterate tab pages
|
||||
for i in range(tabpagenr('$'))
|
||||
" get the list of buffers in the tab
|
||||
let tabList = tabpagebuflist(i + 1)
|
||||
let idx = 0
|
||||
" iterate each buffer in the list
|
||||
while idx < len(tabList)
|
||||
" if it matches the buffer we are looking for...
|
||||
if (tabList[idx] == bufNr)
|
||||
" ... save the number
|
||||
let tabNr = i + 1
|
||||
break
|
||||
endif
|
||||
let idx = idx + 1
|
||||
endwhile
|
||||
if (tabNr != -1)
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
" switch the the tab containing the buffer
|
||||
if (tabNr != -1)
|
||||
execute "tabn ".tabNr
|
||||
endif
|
||||
|
||||
" Buffer was already open......check to see if it is in a window
|
||||
let bufWindow = bufwinnr(bufNr)
|
||||
if (bufWindow == -1)
|
||||
" Buffer was not in a window so open one
|
||||
let v:errmsg=""
|
||||
if (splitType == "h")
|
||||
silent! execute ":sbuffer".bang." " . FILENAME
|
||||
elseif (splitType == "v")
|
||||
silent! execute ":vert sbuffer " . FILENAME
|
||||
elseif (splitType == "t")
|
||||
silent! execute ":tab sbuffer " . FILENAME
|
||||
else
|
||||
silent! execute ":buffer".bang." " . FILENAME
|
||||
endif
|
||||
if (v:errmsg != "")
|
||||
echo v:errmsg
|
||||
endif
|
||||
else
|
||||
" Buffer is already in a window so switch to the window
|
||||
execute bufWindow."wincmd w"
|
||||
if (bufWindow != winnr())
|
||||
" something wierd happened...open the buffer
|
||||
let v:errmsg=""
|
||||
if (splitType == "h")
|
||||
silent! execute ":split".bang." " . FILENAME
|
||||
elseif (splitType == "v")
|
||||
silent! execute ":vsplit".bang." " . FILENAME
|
||||
elseif (splitType == "t")
|
||||
silent! execute ":tab split".bang." " . FILENAME
|
||||
else
|
||||
silent! execute ":e".bang." " . FILENAME
|
||||
endif
|
||||
if (v:errmsg != "")
|
||||
echo v:errmsg
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Function : EqualFilePaths (PRIVATE)
|
||||
" Purpose : Compares two paths. Do simple string comparison anywhere but on
|
||||
" Windows. On Windows take into account that file paths could differ
|
||||
" in usage of separators and the fact that case does not matter.
|
||||
" "c:\WINDOWS" is the same path as "c:/windows". has("win32unix") Vim
|
||||
" version does not count as one having Windows path rules.
|
||||
" Args : path1 (IN) -- first path
|
||||
" path2 (IN) -- second path
|
||||
" Returns : 1 if path1 is equal to path2, 0 otherwise.
|
||||
" Author : Ilya Bobir <ilya@po4ta.com>
|
||||
function! <SID>EqualFilePaths(path1, path2)
|
||||
if has("win16") || has("win32") || has("win64") || has("win95")
|
||||
return substitute(a:path1, "\/", "\\", "g") ==? substitute(a:path2, "\/", "\\", "g")
|
||||
else
|
||||
return a:path1 == a:path2
|
||||
endif
|
||||
endfunction
|
|
@ -0,0 +1,513 @@
|
|||
*bufexplorer.txt* Buffer Explorer Last Change: 22 Oct 2010
|
||||
|
||||
Buffer Explorer *buffer-explorer* *bufexplorer*
|
||||
Version 7.2.8
|
||||
|
||||
Plugin for easily exploring (or browsing) Vim |:buffers|.
|
||||
|
||||
|bufexplorer-installation| Installation
|
||||
|bufexplorer-usage| Usage
|
||||
|bufexplorer-windowlayout| Window Layout
|
||||
|bufexplorer-customization| Customization
|
||||
|bufexplorer-changelog| Change Log
|
||||
|bufexplorer-todo| Todo
|
||||
|bufexplorer-credits| Credits
|
||||
|
||||
For Vim version 7.0 and above.
|
||||
This plugin is only available if 'compatible' is not set.
|
||||
|
||||
{Vi does not have any of this}
|
||||
|
||||
==============================================================================
|
||||
INSTALLATION *bufexplorer-installation*
|
||||
|
||||
To install:
|
||||
- Download the bufexplorer.zip.
|
||||
- Extract the zip archive into your runtime directory.
|
||||
The archive contains plugin/bufexplorer.vim, and doc/bufexplorer.txt.
|
||||
- Start Vim or goto an existing instance of Vim.
|
||||
- Execute the following command:
|
||||
>
|
||||
:helptag <your runtime directory>/doc
|
||||
<
|
||||
This will generate all the help tags for any file located in the doc
|
||||
directory.
|
||||
|
||||
==============================================================================
|
||||
USAGE *bufexplorer-usage*
|
||||
|
||||
To start exploring in the current window, use: >
|
||||
\be or :BufExplorer
|
||||
To start exploring in a newly split horizontal window, use: >
|
||||
\bs or :BufExplorerHorizontalSplit
|
||||
To start exploring in a newly split vertical window, use: >
|
||||
\bv or :BufExplorerVerticalSplit
|
||||
|
||||
If you would like to use something other than '\', you may simply change the
|
||||
leader (see |mapleader|).
|
||||
|
||||
Note: If the current buffer is modified when bufexplorer started, the current
|
||||
window is always split and the new bufexplorer is displayed in that new
|
||||
window.
|
||||
|
||||
Commands to use once exploring:
|
||||
|
||||
<F1> Toggle help information.
|
||||
<enter> Opens the buffer that is under the cursor into the current
|
||||
window.
|
||||
<leftmouse> Opens the buffer that is under the cursor into the current
|
||||
window.
|
||||
<shift-enter> Opens the buffer that is under the cursor in another tab.
|
||||
d |:delete|the buffer under the cursor from the list. The
|
||||
buffer's 'buflisted' is cleared. This allows for the buffer to
|
||||
be displayed again using the 'show unlisted' command.
|
||||
R Toggles relative path/absolute path.
|
||||
T Toggles to show only buffers for this tab or not.
|
||||
D |:wipeout|the buffer under the cursor from the list. When a
|
||||
buffers is wiped, it will not be shown when unlisted buffer are
|
||||
displayed.
|
||||
f Toggles whether you are taken to the active window when
|
||||
selecting a buffer or not.
|
||||
o Opens the buffer that is under the cursor into the current
|
||||
window.
|
||||
p Toggles the showing of a split filename/pathname.
|
||||
q Quit exploring.
|
||||
r Reverses the order the buffers are listed in.
|
||||
s Selects the order the buffers are listed in. Either by buffer
|
||||
number, file name, file extension, most recently used (MRU), or
|
||||
full path.
|
||||
t Opens the buffer that is under the cursor in another tab.
|
||||
u Toggles the showing of "unlisted" buffers.
|
||||
|
||||
Once invoked, Buffer Explorer displays a sorted list (MRU is the default
|
||||
sort method) of all the buffers that are currently opened. You are then
|
||||
able to move the cursor to the line containing the buffer's name you are
|
||||
wanting to act upon. Once you have selected the buffer you would like,
|
||||
you can then either open it, close it(delete), resort the list, reverse
|
||||
the sort, quit exploring and so on...
|
||||
|
||||
===============================================================================
|
||||
WINDOW LAYOUT *bufexplorer-windowlayout*
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
" Press <F1> for Help
|
||||
" Sorted by mru | Locate buffer | Absolute Split path
|
||||
"=
|
||||
01 %a bufexplorer.txt C:\Vim\vimfiles\doc line 87
|
||||
02 # bufexplorer.vim c:\Vim\vimfiles\plugin line 1
|
||||
-------------------------------------------------------------------------------
|
||||
| | | | |
|
||||
| | | | +-- Current Line #.
|
||||
| | | +-- Relative/Full Path
|
||||
| | +-- Buffer Name.
|
||||
| +-- Buffer Attributes. See|:buffers|for more information.
|
||||
+-- Buffer Number. See|:buffers|for more information.
|
||||
|
||||
===============================================================================
|
||||
CUSTOMIZATION *bufexplorer-customization*
|
||||
|
||||
*g:bufExplorerChgWin*
|
||||
If set, bufexplorer will bring up the selected buffer in the window specified
|
||||
by g:bufExplorerChgWin.
|
||||
|
||||
*g:bufExplorerDefaultHelp*
|
||||
To control whether the default help is displayed or not, use: >
|
||||
let g:bufExplorerDefaultHelp=0 " Do not show default help.
|
||||
let g:bufExplorerDefaultHelp=1 " Show default help.
|
||||
The default is to show the default help.
|
||||
|
||||
*g:bufExplorerDetailedHelp*
|
||||
To control whether detailed help is display by, use: >
|
||||
let g:bufExplorerDetailedHelp=0 " Do not show detailed help.
|
||||
let g:bufExplorerDetailedHelp=1 " Show detailed help.
|
||||
The default is NOT to show detailed help.
|
||||
|
||||
*g:bufExplorerFindActive*
|
||||
To control whether you are taken to the active window when selecting a buffer,
|
||||
use: >
|
||||
let g:bufExplorerFindActive=0 " Do not go to active window.
|
||||
let g:bufExplorerFindActive=1 " Go to active window.
|
||||
The default is to be taken to the active window.
|
||||
|
||||
*g:bufExplorerFuncRef*
|
||||
When a buffer is selected, the functions specified either singly or as a list
|
||||
will be called.
|
||||
|
||||
*g:bufExplorerReverseSort*
|
||||
To control whether to sort the buffer in reverse order or not, use: >
|
||||
let g:bufExplorerReverseSort=0 " Do not sort in reverse order.
|
||||
let g:bufExplorerReverseSort=1 " Sort in reverse order.
|
||||
The default is NOT to sort in reverse order.
|
||||
|
||||
*g:bufExplorerShowDirectories*
|
||||
Directories usually show up in the list from using a command like ":e .".
|
||||
To control whether to show directories in the buffer list or not, use: >
|
||||
let g:bufExplorerShowDirectories=1 " Show directories.
|
||||
let g:bufExplorerShowDirectories=0 " Don't show directories.
|
||||
The default is to show directories.
|
||||
|
||||
*g:bufExplorerShowRelativePath*
|
||||
To control whether to show absolute paths or relative to the current
|
||||
directory, use: >
|
||||
let g:bufExplorerShowRelativePath=0 " Show absolute paths.
|
||||
let g:bufExplorerShowRelativePath=1 " Show relative paths.
|
||||
The default is to show absolute paths.
|
||||
|
||||
*g:bufExplorerShowTabBuffer*
|
||||
To control weither or not to show buffers on for the specific tab or not, use: >
|
||||
let g:bufExplorerShowTabBuffer=0 " No.
|
||||
let g:bufExplorerShowTabBuffer=1 " Yes.
|
||||
The default is not to show.
|
||||
|
||||
*g:bufExplorerShowUnlisted*
|
||||
To control whether to show unlisted buffer or not, use: >
|
||||
let g:bufExplorerShowUnlisted=0 " Do not show unlisted buffers.
|
||||
let g:bufExplorerShowUnlisted=1 " Show unlisted buffers.
|
||||
The default is to NOT show unlisted buffers.
|
||||
|
||||
*g:bufExplorerSortBy*
|
||||
To control what field the buffers are sorted by, use: >
|
||||
let g:bufExplorerSortBy='extension' " Sort by file extension.
|
||||
let g:bufExplorerSortBy='fullpath' " Sort by full file path name.
|
||||
let g:bufExplorerSortBy='mru' " Sort by most recently used.
|
||||
let g:bufExplorerSortBy='name' " Sort by the buffer's name.
|
||||
let g:bufExplorerSortBy='number' " Sort by the buffer's number.
|
||||
The default is to sort by mru.
|
||||
|
||||
*g:bufExplorerSplitBelow*
|
||||
To control where the new split window will be placed above or below the
|
||||
current window, use: >
|
||||
let g:bufExplorerSplitBelow=1 " Split new window below current.
|
||||
let g:bufExplorerSplitBelow=0 " Split new window above current.
|
||||
The default is to use what ever is set by the global &splitbelow
|
||||
variable.
|
||||
|
||||
*g:bufExplorerSplitOutPathName*
|
||||
To control whether to split out the path and file name or not, use: >
|
||||
let g:bufExplorerSplitOutPathName=1 " Split the path and file name.
|
||||
let g:bufExplorerSplitOutPathName=0 " Don't split the path and file
|
||||
" name.
|
||||
The default is to split the path and file name.
|
||||
|
||||
*g:bufExplorerSplitRight*
|
||||
To control where the new vsplit window will be placed to the left or right of
|
||||
current window, use: >
|
||||
let g:bufExplorerSplitRight=0 " Split left.
|
||||
let g:bufExplorerSplitRight=1 " Split right.
|
||||
The default is to use the global &splitright.
|
||||
|
||||
===============================================================================
|
||||
CHANGE LOG *bufexplorer-changelog*
|
||||
|
||||
7.2.8 - Enhancements:
|
||||
* Thanks to Charles Campbell for integrating bufexplorer with GDBMGR.
|
||||
http://mysite.verizon.net/astronaut/vim/index.html#GDBMGR
|
||||
7.2.7 - Fix:
|
||||
* My 1st attempt to fix the "cache" issue where buffers information
|
||||
has changed but the cache/display does not reflect those changes.
|
||||
More work still needs to be done.
|
||||
7.2.6 - Fix:
|
||||
* Thanks to Michael Henry for pointing out that I totally forgot to
|
||||
update the inline help to reflect the previous change to the 'd'
|
||||
and 'D' keys. Opps!
|
||||
7.2.5 - Fix:
|
||||
* Philip Morant suggested switching the command (bwipe) associated
|
||||
with the 'd' key with the command (bdelete) associated with the 'D'
|
||||
key. This made sense since the 'd' key is more likely to be used
|
||||
compared to the 'D' key.
|
||||
7.2.4 - Fix:
|
||||
* I did not implement the patch provided by Godefroid Chapelle
|
||||
correctly. I missed one line which happened to be the most
|
||||
important one :)
|
||||
7.2.3 - Enhancements:
|
||||
* Thanks to David Fishburn for helping me out with a much needed
|
||||
code overhaul as well as some awesome performance enhancements.
|
||||
He also reworked the handling of tabs.
|
||||
* Thanks to Vladimir Dobriakov for making the suggestions on
|
||||
enhancing the documentation to include a better explaination of
|
||||
what is contained in the main bufexplorer window.
|
||||
* Thanks to Yuriy Ershov for added code that when the bufexplorer
|
||||
window is opened, the cursor is now positioned at the line with the
|
||||
active buffer (useful in non-MRU sort modes).
|
||||
* Yuriy also added the abiltiy to cycle through the sort fields in
|
||||
reverse order.
|
||||
Fixes:
|
||||
* Thanks to Michael Henry for supplying a patch that allows
|
||||
bufexplorer to be opened even when there is one buffer or less.
|
||||
* Thanks to Godefroid Chapelle for supplying a patch that fixed
|
||||
MRU sort order after loading a session.
|
||||
7.2.2 - Fixes:
|
||||
* Thanks to David L. Dight for spotting and fixing an issue when
|
||||
using ctrl^. bufexplorer would incorrectly handle the previous
|
||||
buffer so that when ctrl^ was pressed the incorrect file was opened.
|
||||
7.2.1 - Fixes:
|
||||
* Thanks to Dimitar for spotting and fixing a feature that was
|
||||
inadvertently left out of the previous version. The feature was
|
||||
when bufexplorer was used together with WinManager, you could use
|
||||
the tab key to open a buffer in a split window.
|
||||
7.2.0 - Enhancements:
|
||||
* For all those missing the \bs and \bv commands, these have now
|
||||
returned. Thanks to Phil O'Connell for asking for the return of
|
||||
these missing features and helping test out this version.
|
||||
Fixes:
|
||||
* Fixed problem with the bufExplorerFindActive code not working
|
||||
correctly.
|
||||
* Fixed an incompatibility between bufexplorer and netrw that caused
|
||||
buffers to be incorrectly removed from the MRU list.
|
||||
7.1.7 - Fixes:
|
||||
* TaCahiroy fixed several issues related to opening a buffer in a
|
||||
tab.
|
||||
7.1.6 - Fixes:
|
||||
* Removed ff=unix from modeline in bufexplorer.txt. Found by Bill
|
||||
McCarthy.
|
||||
7.1.5 - Fixes:
|
||||
* Could not open unnamed buffers. Fixed by TaCahiroy.
|
||||
7.1.4 - Fixes:
|
||||
* Sometimes when a file's path has 'white space' in it, extra buffers
|
||||
would be created containing each piece of the path. i.e:
|
||||
opening c:\document and settings\test.txt would create a buffer
|
||||
named "and" and a buffer named "Documents". This was reported and
|
||||
fixed by TaCa Yoss.
|
||||
7.1.3 - Fixes:
|
||||
* Added code to allow only one instance of the plugin to run at a
|
||||
time. Thanks Dennis Hostetler.
|
||||
7.1.2 - Fixes:
|
||||
* Fixed a jumplist issue spotted by JiangJun. I overlooked the
|
||||
'jumplist' and with a couple calls to 'keepjumps', everything is
|
||||
fine again.
|
||||
* Went back to just having a plugin file, no autoload file. By having
|
||||
the autoload, WinManager was no longer working and without really
|
||||
digging into the cause, it was easier to go back to using just a
|
||||
plugin file.
|
||||
7.1.1 - Fixes:
|
||||
* A problem spotted by Thomas Arendsen Hein.
|
||||
When running Vim (7.1.94), error E493 was being thrown.
|
||||
Enhancements:
|
||||
* Added 'D' for 'delete' buffer as the 'd' command was a 'wipe'
|
||||
buffer.
|
||||
7.1.0 - Another 'major' update, some by Dave Larson, some by me.
|
||||
* Making use of 'autoload' now to make the plugin load quicker.
|
||||
* Removed '\bs' and '\bv'. These are now controlled by the user. The
|
||||
user can issue a ':sp' or ':vs' to create a horizontal or vertical
|
||||
split window and then issue a '\be'
|
||||
* Added handling of tabs.
|
||||
7.0.17 - Fixed issue with 'drop' command.
|
||||
Various enhancements and improvements.
|
||||
7.0.16 - Fixed issue reported by Liu Jiaping on non Windows systems, which was
|
||||
...
|
||||
Open file1, open file2, modify file1, open bufexplorer, you get the
|
||||
following error:
|
||||
|
||||
--------8<--------
|
||||
Error detected while processing function
|
||||
<SNR>14_StartBufExplorer..<SNR>14_SplitOpen:
|
||||
line 4:
|
||||
E37: No write since last change (add ! to override)
|
||||
|
||||
But the worse thing is, when I want to save the current buffer and
|
||||
type ':w', I get another error message:
|
||||
E382: Cannot write, 'buftype' option is set
|
||||
--------8<--------
|
||||
|
||||
7.0.15 - Thanks to Mark Smithfield for suggesting bufexplorer needed to handle
|
||||
the ':args' command.
|
||||
7.0.14 - Thanks to Randall Hansen for removing the requirement of terminal
|
||||
versions to be recompiled with 'gui' support so the 'drop' command
|
||||
would work. The 'drop' command is really not needed in terminal
|
||||
versions.
|
||||
7.0.13 - Fixed integration with WinManager.
|
||||
Thanks to Dave Eggum for another update.
|
||||
- Fix: The detailed help didn't display the mapping for toggling
|
||||
the split type, even though the split type is displayed.
|
||||
- Fixed incorrect description in the detailed help for toggling
|
||||
relative or full paths.
|
||||
- Deprecated s:ExtractBufferNbr(). Vim's str2nr() does the same
|
||||
thing.
|
||||
- Created a s:Set() function that sets a variable only if it hasn't
|
||||
already been defined. It's useful for initializing all those
|
||||
default settings.
|
||||
- Removed checks for repetitive command definitions. They were
|
||||
unnecessary.
|
||||
- Made the help highlighting a little more fancy.
|
||||
- Minor reverse compatibility issue: Changed ambiguous setting
|
||||
names to be more descriptive of what they do (also makes the code
|
||||
easier to follow):
|
||||
Changed bufExplorerSortDirection to bufExplorerReverseSort
|
||||
Changed bufExplorerSplitType to bufExplorerSplitVertical
|
||||
Changed bufExplorerOpenMode to bufExplorerUseCurrentWindow
|
||||
- When the BufExplorer window closes, all the file-local marks are
|
||||
now deleted. This may have the benefit of cleaning up some of the
|
||||
jumplist.
|
||||
- Changed the name of the parameter for StartBufExplorer from
|
||||
"split" to "open". The parameter is a string which specifies how
|
||||
the buffer will be open, not if it is split or not.
|
||||
- Deprecated DoAnyMoreBuffersExist() - it is a one line function
|
||||
only used in one spot.
|
||||
- Created four functions (SplitOpen(), RebuildBufferList(),
|
||||
UpdateHelpStatus() and ReSortListing()) all with one purpose - to
|
||||
reduce repeated code.
|
||||
- Changed the name of AddHeader() to CreateHelp() to be more
|
||||
descriptive of what it does. It now returns an array instead of
|
||||
updating the window directly. This has the benefit of making the
|
||||
code more efficient since the text the function returns is used a
|
||||
little differently in the two places the function is called.
|
||||
- Other minor simplifications.
|
||||
7.0.12 - MAJOR Update.
|
||||
This version will ONLY run with Vim version 7.0 or greater.
|
||||
Dave Eggum has made some 'significant' updates to this latest
|
||||
version:
|
||||
- Added BufExplorerGetAltBuf() global function to be used in the
|
||||
user’s rulerformat.
|
||||
- Added g:bufExplorerSplitRight option.
|
||||
- Added g:bufExplorerShowRelativePath option with mapping.
|
||||
- Added current line highlighting.
|
||||
- The split type can now be changed whether bufexplorer is opened
|
||||
in split mode or not.
|
||||
- Various major and minor bug fixes and speed improvements.
|
||||
- Sort by extension.
|
||||
Other improvements/changes:
|
||||
- Changed the help key from '?' to <F1> to be more 'standard'.
|
||||
- Fixed splitting of vertical bufexplorer window.
|
||||
Hopefully I have not forgot something :)
|
||||
7.0.11 - Fixed a couple of highlighting bugs, reported by David Eggum. He also
|
||||
changed passive voice to active on a couple of warning messages.
|
||||
7.0.10 - Fixed bug report by Xiangjiang Ma. If the 'ssl' option is set,
|
||||
the slash character used when displaying the path was incorrect.
|
||||
7.0.9 - Martin Grenfell found and eliminated an annoying bug in the
|
||||
bufexplorer/winmanager integration. The bug was were an
|
||||
annoying message would be displayed when a window was split or
|
||||
a new file was opened in a new window. Thanks Martin!
|
||||
7.0.8 - Thanks to Mike Li for catching a bug in the WinManager integration.
|
||||
The bug was related to the incorrect displaying of the buffer
|
||||
explorer's window title.
|
||||
7.0.7 - Thanks to Jeremy Cowgar for adding a new enhancement. This
|
||||
enhancement allows the user to press 'S', that is capital S, which
|
||||
will open the buffer under the cursor in a newly created split
|
||||
window.
|
||||
7.0.6 - Thanks to Larry Zhang for finding a bug in the "split" buffer code.
|
||||
If you force set g:bufExplorerSplitType='v' in your vimrc, and if you
|
||||
tried to do a \bs to split the bufexplorer window, it would always
|
||||
split horizontal, not vertical. He also found that I had a typeo in
|
||||
that the variable g:bufExplorerSplitVertSize was all lower case in
|
||||
the documentation which was incorrect.
|
||||
7.0.5 - Thanks to Mun Johl for pointing out a bug that if a buffer was
|
||||
modified, the '+' was not showing up correctly.
|
||||
7.0.4 - Fixed a problem discovered first by Xiangjiang Ma. Well since I've
|
||||
been using vim 7.0 and not 6.3, I started using a function (getftype)
|
||||
that is not in 6.3. So for backward compatibility, I conditionaly use
|
||||
this function now. Thus, the g:bufExplorerShowDirectories feature is
|
||||
only available when using vim 7.0 and above.
|
||||
7.0.3 - Thanks to Erwin Waterlander for finding a problem when the last
|
||||
buffer was deleted. This issue got me to rewrite the buffer display
|
||||
logic (which I've wanted to do for sometime now).
|
||||
Also great thanks to Dave Eggum for coming up with idea for
|
||||
g:bufExplorerShowDirectories. Read the above information about this
|
||||
feature.
|
||||
7.0.2 - Thanks to Thomas Arendsen Hein for finding a problem when a user
|
||||
has the default help turned off and then brought up the explorer. An
|
||||
E493 would be displayed.
|
||||
7.0.1 - Thanks to Erwin Waterlander for finding a couple problems.
|
||||
The first problem allowed a modified buffer to be deleted. Opps! The
|
||||
second problem occurred when several files were opened, BufExplorer
|
||||
was started, the current buffer was deleted using the 'd' option, and
|
||||
then BufExplorer was exited. The deleted buffer was still visible
|
||||
while it is not in the buffers list. Opps again!
|
||||
7.0.0 - Thanks to Shankar R. for suggesting to add the ability to set
|
||||
the fixed width (g:bufExplorerSplitVertSize) of a new window
|
||||
when opening bufexplorer vertically and fixed height
|
||||
(g:bufExplorerSplitHorzSize) of a new window when opening
|
||||
bufexplorer horizontally. By default, the windows are normally
|
||||
split to use half the existing width or height.
|
||||
6.3.0 - Added keepjumps so that the jumps list would not get cluttered with
|
||||
bufexplorer related stuff.
|
||||
6.2.3 - Thanks to Jay Logan for finding a bug in the vertical split position
|
||||
of the code. When selecting that the window was to be split
|
||||
vertically by doing a '\bv', from then on, all splits, i.e. '\bs',
|
||||
were split vertically, even though g:bufExplorerSplitType was not set
|
||||
to 'v'.
|
||||
6.2.2 - Thanks to Patrik Modesto for adding a small improvement. For some
|
||||
reason his bufexplorer window was always showing up folded. He added
|
||||
'setlocal nofoldenable' and it was fixed.
|
||||
6.2.1 - Thanks goes out to Takashi Matsuo for added the 'fullPath' sorting
|
||||
logic and option.
|
||||
6.2.0 - Thanks goes out to Simon Johann-Ganter for spotting and fixing a
|
||||
problem in that the last search pattern is overridden by the search
|
||||
pattern for blank lines.
|
||||
6.1.6 - Thanks to Artem Chuprina for finding a pesky bug that has been around
|
||||
for sometime now. The <esc> key mapping was causing the buffer
|
||||
explored to close prematurely when vim was run in an xterm. The <esc>
|
||||
key mapping is now removed.
|
||||
6.1.5 - Thanks to Khorev Sergey. Added option to show default help or not.
|
||||
6.1.4 - Thanks goes out to Valery Kondakoff for suggesting the addition of
|
||||
setlocal nonumber and foldcolumn=0. This allows for line numbering
|
||||
and folding to be turned off temporarily while in the explorer.
|
||||
6.1.3 - Added folding. Did some code cleanup. Added the ability to force the
|
||||
newly split window to be temporarily vertical, which was suggested by
|
||||
Thomas Glanzmann.
|
||||
6.1.2 - Now pressing the <esc> key will quit, just like 'q'.
|
||||
Added folds to hide winmanager configuration.
|
||||
If anyone had the 'C' option in their cpoptions they would receive
|
||||
a E10 error on startup of BufExplorer. cpo is now saved, updated and
|
||||
restored. Thanks to Charles E Campbell, Jr.
|
||||
Attempted to make sure there can only be one BufExplorer window open
|
||||
at a time.
|
||||
6.1.1 - Thanks to Brian D. Goodwin for adding toupper to FileNameCmp. This
|
||||
way buffers sorted by name will be in the correct order regardless of
|
||||
case.
|
||||
6.0.16 - Thanks to Andre Pang for the original patch/idea to get bufexplorer
|
||||
to work in insertmode/modeless mode (evim). Added Initialize
|
||||
and Cleanup autocommands to handle commands that need to be
|
||||
performed when starting or leaving bufexplorer.
|
||||
6.0.15 - Srinath Avadhanulax added a patch for winmanager.vim.
|
||||
6.0.14 - Fix a few more bug that I thought I already had fixed. Thanks
|
||||
to Eric Bloodworth for adding 'Open Mode/Edit in Place'. Added
|
||||
vertical splitting.
|
||||
6.0.13 - Thanks to Charles E Campbell, Jr. for pointing out some embarrassing
|
||||
typos that I had in the documentation. I guess I need to run
|
||||
the spell checker more :o)
|
||||
6.0.12 - Thanks to Madoka Machitani, for the tip on adding the augroup command
|
||||
around the MRUList autocommands.
|
||||
6.0.11 - Fixed bug report by Xiangjiang Ma. '"=' was being added to the
|
||||
search history which messed up hlsearch.
|
||||
6.0.10 - Added the necessary hooks so that the Srinath Avadhanula's
|
||||
winmanager.vim script could more easily integrate with this script.
|
||||
Tried to improve performance.
|
||||
6.0.9 - Added MRU (Most Recently Used) sort ordering.
|
||||
6.0.8 - Was not resetting the showcmd command correctly.
|
||||
Added nifty help file.
|
||||
6.0.7 - Thanks to Brett Carlane for some great enhancements. Some are added,
|
||||
some are not, yet. Added highlighting of current and alternate
|
||||
filenames. Added splitting of path/filename toggle. Reworked
|
||||
ShowBuffers().
|
||||
Changed my email address.
|
||||
6.0.6 - Copyright notice added. Needed this so that it could be distributed
|
||||
with Debian Linux. Fixed problem with the SortListing() function
|
||||
failing when there was only one buffer to display.
|
||||
6.0.5 - Fixed problems reported by David Pascoe, in that you where unable to
|
||||
hit 'd' on a buffer that belonged to a files that no longer existed
|
||||
and that the 'yank' buffer was being overridden by the help text when
|
||||
the bufexplorer was opened.
|
||||
6.0.4 - Thanks to Charles Campbell, Jr. for making this plugin more plugin
|
||||
*compliant*, adding default keymappings of <Leader>be and <Leader>bs
|
||||
as well as fixing the 'w:sortDirLabel not being defined' bug.
|
||||
6.0.3 - Added sorting capabilities. Sort taken from explorer.vim.
|
||||
6.0.2 - Can't remember. (2001-07-25)
|
||||
6.0.1 - Initial release.
|
||||
|
||||
===============================================================================
|
||||
TODO *bufexplorer-todo*
|
||||
|
||||
- Nothing as of now, buf if you have any suggestions, drop me an email.
|
||||
|
||||
===============================================================================
|
||||
CREDITS *bufexplorer-credits*
|
||||
|
||||
Author: Jeff Lanzarotta <delux256-vim at yahoo dot com>
|
||||
|
||||
Credit must go out to Bram Moolenaar and all the Vim developers for
|
||||
making the world's best editor (IMHO). I also want to thank everyone who
|
||||
helped and gave me suggestions. I wouldn't want to leave anyone out so I
|
||||
won't list names.
|
||||
|
||||
===============================================================================
|
||||
vim:tw=78:noet:wrap:ts=8:ft=help:norl:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,114 @@
|
|||
"*****************************************************************************
|
||||
"** Name: help.vim - extend standard syntax highlighting for help **
|
||||
"** **
|
||||
"** Type: syntax file **
|
||||
"** **
|
||||
"** Author: Christian Habermann **
|
||||
"** christian (at) habermann-net (point) de **
|
||||
"** **
|
||||
"** Copyright: (c) 2002-2004 by Christian Habermann **
|
||||
"** **
|
||||
"** License: GNU General Public License 2 (GPL 2) or later **
|
||||
"** **
|
||||
"** This program is free software; you can redistribute it **
|
||||
"** and/or modify it under the terms of the GNU General Public **
|
||||
"** License as published by the Free Software Foundation; either **
|
||||
"** version 2 of the License, or (at your option) any later **
|
||||
"** version. **
|
||||
"** **
|
||||
"** This program is distributed in the hope that it will be **
|
||||
"** useful, but WITHOUT ANY WARRANTY; without even the implied **
|
||||
"** warrenty of MERCHANTABILITY or FITNESS FOR A PARTICULAR **
|
||||
"** PURPOSE. **
|
||||
"** See the GNU General Public License for more details. **
|
||||
"** **
|
||||
"** Version: 1.0.1 **
|
||||
"** tested under Linux and Win32, VIM and GVIM 6.2 **
|
||||
"** **
|
||||
"** History: 0.1.0 12. Dec. 2002 - 21. Feb. 2003 **
|
||||
"** initial version, not released **
|
||||
"** 1.0.0 6. Apr. 2003 **
|
||||
"** no changes, first release **
|
||||
"** 1.0.1 3. Mar. 2004 **
|
||||
"** marker changed from 0xa7 to $ in order to avoid problems **
|
||||
"** with fonts that use codes > 0x7f as multibyte characters **
|
||||
"** (e.g. Chinese, Korean, Japanese... fonts) **
|
||||
"** **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
"** Description: **
|
||||
"** This syntax file extends the standard syntax highlighting for help **
|
||||
"** files. This is needed in order to view the C-reference manual **
|
||||
"** of the project CRefVim correctly. **
|
||||
"** This syntax file is only active for the help file named **
|
||||
"** "crefvim.txt". For other help files no extention on syntax **
|
||||
"** highlighting is applied. **
|
||||
"** **
|
||||
"** For futher information see crefvimdoc.txt or do :help crefvimdoc **
|
||||
"** **
|
||||
"** Happy viming... **
|
||||
"*****************************************************************************
|
||||
|
||||
|
||||
" extend syntax-highlighting for "crefvim.txt" only (not case-sensitive)
|
||||
|
||||
if tolower(expand("%:t"))=="crefvim.txt"
|
||||
syn match helpCRVSubStatement "statement[0-9Ns]*" contained
|
||||
syn match helpCRVSubCondition "condition[0-9]*" contained
|
||||
syn match helpCRVSubExpression "expression[0-9]*" contained
|
||||
syn match helpCRVSubExpr "expr[0-9N]" contained
|
||||
syn match helpCRVSubType "type-name" contained
|
||||
syn match helpCRVSubIdent "identifier" contained
|
||||
syn match helpCRVSubIdentList "identifier-list" contained
|
||||
syn match helpCRVSubOperand "operand[0-9]*" contained
|
||||
syn match helpCRVSubConstExpr "constant-expression[1-9Ns]*" contained
|
||||
syn match helpCRVSubClassSpec "storage-class-specifier" contained
|
||||
syn match helpCRVSubTypeSpec "type-specifier" contained
|
||||
syn match helpCRVSubEnumList "enumerator-list" contained
|
||||
syn match helpCRVSubDecl "declarator" contained
|
||||
syn match helpCRVSubRetType "return-type" contained
|
||||
syn match helpCRVSubFuncName "function-name" contained
|
||||
syn match helpCRVSubParamList "parameter-list" contained
|
||||
syn match helpCRVSubReplList "replacement-list" contained
|
||||
syn match helpCRVSubNewLine "newline" contained
|
||||
syn match helpCRVSubMessage "message" contained
|
||||
syn match helpCRVSubFilename "filename" contained
|
||||
syn match helpCRVSubDigitSeq "digit-sequence" contained
|
||||
syn match helpCRVSubMacroNames "macro-name[s]*" contained
|
||||
syn match helpCRVSubDirective "directive" contained
|
||||
|
||||
|
||||
syn match helpCRVignore "\$[a-zA-Z0-9\\\*/\._=()\-+%<>&\^|!~\?:,\[\];{}#\'\" ]\+\$" contains=helpCRVstate
|
||||
syn match helpCRVstate "[a-zA-Z0-9\\\*/\._=()\-+%<>&\^|!~\?:,\[\];{}#\'\" ]\+" contained contains=helpCRVSub.*
|
||||
|
||||
|
||||
hi helpCRVitalic term=italic cterm=italic gui=italic
|
||||
|
||||
hi def link helpCRVstate Comment
|
||||
hi def link helpCRVSubStatement helpCRVitalic
|
||||
hi def link helpCRVSubCondition helpCRVitalic
|
||||
hi def link helpCRVSubExpression helpCRVitalic
|
||||
hi def link helpCRVSubExpr helpCRVitalic
|
||||
hi def link helpCRVSubOperand helpCRVitalic
|
||||
hi def link helpCRVSubType helpCRVitalic
|
||||
hi def link helpCRVSubIdent helpCRVitalic
|
||||
hi def link helpCRVSubIdentList helpCRVitalic
|
||||
hi def link helpCRVSubConstExpr helpCRVitalic
|
||||
hi def link helpCRVSubClassSpec helpCRVitalic
|
||||
hi def link helpCRVSubTypeSpec helpCRVitalic
|
||||
hi def link helpCRVSubEnumList helpCRVitalic
|
||||
hi def link helpCRVSubDecl helpCRVitalic
|
||||
hi def link helpCRVSubRetType helpCRVitalic
|
||||
hi def link helpCRVSubFuncName helpCRVitalic
|
||||
hi def link helpCRVSubParamList helpCRVitalic
|
||||
hi def link helpCRVSubReplList helpCRVitalic
|
||||
hi def link helpCRVSubNewLine helpCRVitalic
|
||||
hi def link helpCRVSubMessage helpCRVitalic
|
||||
hi def link helpCRVSubFilename helpCRVitalic
|
||||
hi def link helpCRVSubDigitSeq helpCRVitalic
|
||||
hi def link helpCRVSubMacroNames helpCRVitalic
|
||||
hi def link helpCRVSubDirective helpCRVitalic
|
||||
hi def link helpCRVignore Ignore
|
||||
endif
|
||||
|
||||
" vim: ts=8 sw=2
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,356 @@
|
|||
"*****************************************************************************
|
||||
"** Name: crefvim.vim - a C-Reference for Vim **
|
||||
"** **
|
||||
"** Type: global VIM plugin **
|
||||
"** **
|
||||
"** Author: Christian Habermann **
|
||||
"** christian(at)habermann-net(point)de **
|
||||
"** **
|
||||
"** Copyright: (c) 2002, 2003 by Christian Habermann **
|
||||
"** **
|
||||
"** License: GNU General Public License 2 (GPL 2) or later **
|
||||
"** **
|
||||
"** This program is free software; you can redistribute it **
|
||||
"** and/or modify it under the terms of the GNU General Public **
|
||||
"** License as published by the Free Software Foundation; either **
|
||||
"** version 2 of the License, or (at your option) any later **
|
||||
"** version. **
|
||||
"** **
|
||||
"** This program is distributed in the hope that it will be **
|
||||
"** useful, but WITHOUT ANY WARRANTY; without even the implied **
|
||||
"** warrenty of MERCHANTABILITY or FITNESS FOR A PARTICULAR **
|
||||
"** PURPOSE. **
|
||||
"** See the GNU General Public License for more details. **
|
||||
"** **
|
||||
"** Version: 1.0.0 **
|
||||
"** tested under Linux (vim, gvim 6.1) and Win32 (gvim 6.1) **
|
||||
"** **
|
||||
"** History: 0.1.0 12. Dec. 2002 - 23. Feb. 2003 **
|
||||
"** initial version, not released **
|
||||
"** 1.0.0 6. Apr. 2003 **
|
||||
"** no changes, first release **
|
||||
"** **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
"** Description: **
|
||||
"** This script's intention is to provide a C-reference manual that can **
|
||||
"** be accessed from within Vim. **
|
||||
"** **
|
||||
"** For futher information see crefvim.txt or do :help crefvim **
|
||||
"** **
|
||||
"** **
|
||||
"** Happy viming... **
|
||||
"*****************************************************************************
|
||||
|
||||
" allow user to avoid loading this plugin and prevent loading twice
|
||||
if exists ("loaded_crefvim")
|
||||
finish
|
||||
endif
|
||||
|
||||
let loaded_crefvim = 1
|
||||
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"************************** C O N F I G U R A T I O N ************************
|
||||
"*****************************************************************************
|
||||
|
||||
" the mappings:
|
||||
if !hasmapto('<Plug>CRV_CRefVimVisual')
|
||||
vmap <silent> <unique> <Leader>cr <Plug>CRV_CRefVimVisual
|
||||
endif
|
||||
if !hasmapto('<Plug>CRV_CRefVimNormal')
|
||||
nmap <silent> <unique> <Leader>cr <Plug>CRV_CRefVimNormal
|
||||
endif
|
||||
if !hasmapto('<Plug>CRV_CRefVimAsk')
|
||||
map <silent> <unique> <Leader>cw <Plug>CRV_CRefVimAsk
|
||||
endif
|
||||
if !hasmapto('<Plug>CRV_CRefVimInvoke')
|
||||
map <silent> <unique> <Leader>cc <Plug>CRV_CRefVimInvoke
|
||||
endif
|
||||
|
||||
vmap <silent> <unique> <script> <Plug>CRV_CRefVimVisual y:call <SID>CRV_CRefVimWord('<c-r>"')<CR>
|
||||
nmap <silent> <unique> <script> <Plug>CRV_CRefVimNormal :call <SID>CRV_CRefVimWord(expand("<cword>"))<CR>
|
||||
map <silent> <unique> <script> <Plug>CRV_CRefVimAsk :call <SID>CRV_CRefVimAskForWord()<CR>
|
||||
map <silent> <unique> <script> <Plug>CRV_CRefVimInvoke :call <SID>CRV_CRefVimShowContents()<CR>
|
||||
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"************************* I N I T I A L I S A T I O N ***********************
|
||||
"*****************************************************************************
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"****************** I N T E R F A C E T O C O R E **************************
|
||||
"*****************************************************************************
|
||||
|
||||
"*****************************************************************************
|
||||
"** this function separates plugin-core-function from user **
|
||||
"*****************************************************************************
|
||||
function <SID>CRV_CRefVimWord(str)
|
||||
call s:CRefVim(a:str)
|
||||
endfunction
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** this function separates plugin-core-function from user **
|
||||
"*****************************************************************************
|
||||
function <SID>CRV_CRefVimAskForWord()
|
||||
call s:CRefVimAskForWord()
|
||||
endfunction
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** this function separates plugin-core-function from user **
|
||||
"*****************************************************************************
|
||||
function <SID>CRV_CRefVimShowContents()
|
||||
" show contents of C-reference manual
|
||||
call s:LookUp("")
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"************************ C O R E F U N C T I O N S *************************
|
||||
"*****************************************************************************
|
||||
|
||||
"*****************************************************************************
|
||||
"** ask for a word/phrase and lookup **
|
||||
"*****************************************************************************
|
||||
function s:CRefVimAskForWord()
|
||||
let l:strng = input("What to lookup: ")
|
||||
call s:LookUp(l:strng)
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** input: "str" **
|
||||
"** output: empty string: "str" is not an operator **
|
||||
"** else: name of tag to go to **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
"** remarks: **
|
||||
"** This function tests whether or not "str" is an operator. **
|
||||
"** If so, the tag to go to is returned. **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
function s:IsItAnOperator(str)
|
||||
|
||||
" get first character
|
||||
let l:firstChr = strpart(a:str, 0, 1)
|
||||
|
||||
" is the first character of the help-string an operator?
|
||||
if stridx("!&+-*/%,.:<=>?^|~(){}[]", l:firstChr) >= 0
|
||||
return "crv-operators"
|
||||
else
|
||||
return ""
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** input: "str" **
|
||||
"** output: empty string: "str" is not an escape-sequence **
|
||||
"** else: name of tag to go to **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
"** remarks: **
|
||||
"** This function tests whether or not "str" is an escape-sequence. **
|
||||
"** If so, the tag to go to is returned. **
|
||||
"** Note: currently \' does not work (="\\\'") **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
function s:IsItAnEscSequence(str)
|
||||
|
||||
if (a:str == "\\") || (a:str == "\\\\") || (a:str == "\\0") || (a:str == "\\x") ||
|
||||
\(a:str == "\\a") || (a:str == "\\b") || (a:str == "\\f") || (a:str == "\\n") ||
|
||||
\(a:str == "\\r") || (a:str == "\\t") || (a:str == "\\v") || (a:str == "\\?") ||
|
||||
\(a:str == "\\\'") || (a:str == "\\\"")
|
||||
return "crv-lngEscSeq"
|
||||
else
|
||||
return ""
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** input: "str" **
|
||||
"** output: empty string: "str" is not a comment **
|
||||
"** else: name of tag to go to **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
"** remarks: **
|
||||
"** This function tests whether or not "str" is a comment. **
|
||||
"** If so, the tag to go to is returned. **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
function s:IsItAComment(str)
|
||||
|
||||
if (a:str == "//") || (a:str == "/*") || (a:str == "*/")
|
||||
return "crv-lngComment"
|
||||
else
|
||||
return ""
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** input: "str" **
|
||||
"** output: empty string: "str" is not a preprocessor **
|
||||
"** else: name of tag to go to **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
"** remarks: **
|
||||
"** This function tests whether or not "str" is a preprocessor command **
|
||||
"** or a preprocessor operator. **
|
||||
"** If so, the tag to go to is returned. **
|
||||
"** **
|
||||
"** Nothing is done if the help-string is equal to "if" or "else" **
|
||||
"** because these are statements too. For "if" and "else" it's assumed **
|
||||
"** that the statements are meant. But "#if" and "#else" are treated **
|
||||
"** as preprocessor commands. **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
function s:IsItAPreprocessor(str)
|
||||
|
||||
" get first character
|
||||
let l:firstChr = strpart(a:str, 0, 1)
|
||||
|
||||
" if first character of the help-string is a #, we have the command/operator
|
||||
" string in an appropriate form, so append this help-string to "crv-"
|
||||
if l:firstChr == "#"
|
||||
return "crv-" . a:str
|
||||
else
|
||||
" no # in front of the help string, so evaluate which command/operator
|
||||
" is meant
|
||||
if (a:str == "defined")
|
||||
return "crv-defined"
|
||||
else
|
||||
if (a:str == "define") ||
|
||||
\(a:str == "undef") ||
|
||||
\(a:str == "ifdef") ||
|
||||
\(a:str == "ifndef") ||
|
||||
\(a:str == "elif") ||
|
||||
\(a:str == "endif") ||
|
||||
\(a:str == "include") ||
|
||||
\(a:str == "line") ||
|
||||
\(a:str == "error") ||
|
||||
\(a:str == "pragma")
|
||||
return "\#" . a:str
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** input: "str" to lookup in C-reference manual **
|
||||
"** output: none **
|
||||
"*****************************************************************************
|
||||
"** remarks: **
|
||||
"** Lookup string "str". **
|
||||
"** Generally this function calls :help crv-"str" where "str" is the **
|
||||
"** word for which the user wants some help. **
|
||||
"** **
|
||||
"** But before activating VIM's help-system some tests and/or **
|
||||
"** modifications are done on "str": **
|
||||
"** - if help-string is a comment (//, /* or */), go to section **
|
||||
"** describing comments **
|
||||
"** - if help-string is an escape-sequence, go to section describing **
|
||||
"** escape-sequences **
|
||||
"** - if help-string is an operator, go to section dealing with operators **
|
||||
"** - if help-string is a preprocessor command/operator, go to section **
|
||||
"** that describes that command/operator **
|
||||
"** - else call :help crv-"str" **
|
||||
"** **
|
||||
"** If the help-string is empty, go to contents of C-reference manual. **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
function s:LookUp(str)
|
||||
|
||||
if a:str != ""
|
||||
|
||||
let l:helpTag = s:IsItAComment(a:str)
|
||||
|
||||
if l:helpTag == ""
|
||||
let l:helpTag = s:IsItAnEscSequence(a:str)
|
||||
|
||||
if l:helpTag == ""
|
||||
let l:helpTag = s:IsItAnOperator(a:str)
|
||||
|
||||
if l:helpTag == ""
|
||||
let l:helpTag = s:IsItAPreprocessor(a:str)
|
||||
|
||||
if l:helpTag == ""
|
||||
let l:helpTag = "crv-" . a:str
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
||||
" reset error message
|
||||
let v:errmsg = ""
|
||||
|
||||
" activate help-system looking for the appropriate topic
|
||||
" suppress error messages
|
||||
silent! execute ":help " . l:helpTag
|
||||
|
||||
" if there was an error, print message
|
||||
if v:errmsg != ""
|
||||
echo " No help found for \"" .a:str . "\""
|
||||
endif
|
||||
else
|
||||
" help string is empty, so show contents of manual
|
||||
execute ":help crefvim"
|
||||
endif
|
||||
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
"*****************************************************************************
|
||||
"** input: "str" to lookup in C-reference manual **
|
||||
"** output: none **
|
||||
"*****************************************************************************
|
||||
"** remarks: **
|
||||
"** lookup string "str". **
|
||||
"** If there is no string, ask for word/phrase. **
|
||||
"** **
|
||||
"*****************************************************************************
|
||||
function s:CRefVim(str)
|
||||
|
||||
let s:strng = a:str
|
||||
|
||||
if s:strng == "" " is there a string to search for?
|
||||
call s:CRefVimAskForWord()
|
||||
else
|
||||
call s:LookUp(s:strng)
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
"*** EOF ***
|
|
@ -0,0 +1,34 @@
|
|||
Joe Steffen - Creator of Cscope
|
||||
Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de> - Maintainer
|
||||
Petr Sorfa <petr@users.sourceforge.net> - Initial OpenSource Maintainer
|
||||
Simon Cozens - autoconf setup
|
||||
garp@digi.com - .cc .hh support
|
||||
jens persson <cscope@persson.cx> - new man page
|
||||
Edgar Toernig - cscope stability
|
||||
Martin Kraemer - various improvments
|
||||
Joshua Uziel <uzi@linuxcare.com> - code clean up, -h and -k options, and lots more (including autoconf)
|
||||
Mike Hopkirk <hops@sco.com> - osr5 build, ocs
|
||||
Darrylo Okahata <darrylo@users.sourceforge.net> - code quality improvements
|
||||
Brent Verner <brent@rcfile.org> - -R option to recurse sub directories
|
||||
Thomas Klausner - NetBSD support
|
||||
Andrew Sharpe - progress bar, tab between line selection and prompts and more
|
||||
Carl Mascott - FreeBSD support
|
||||
Rich Salz - Allow -i accept stdio as input as "-"
|
||||
Stephane Fritsch - BeOS support
|
||||
Andy Newman <atrn> - FreeBSD support patch
|
||||
Sascha Blank - FreeBSD support
|
||||
Bruce Frost - Stability
|
||||
Chuck Marco and Wilfredo Sanchez - Darwin support
|
||||
Jason Duell - CSCOPE_EDITOR and CSCOPE_LINEFLAG*, invname database
|
||||
Tom Hull - Similar work to CSCOPE_EDITOR and friends
|
||||
Donald Slutz - Various fixes
|
||||
OGAWA Hirofumi - line mode fixes
|
||||
Garret Hade - Various ocs fixes
|
||||
Nick Dixon - Improvement in key handling
|
||||
Triet H. Lai <thlai@mail.usyd.edu.au> - GNU Emacs fixes for xcscope.el
|
||||
Steven Elliott <selliott4@austin.rr.com> - Fuzzy pattern matching for xcscope.el
|
||||
Ragho Mahalingam <ragho@mahalingam.com> - webcscope
|
||||
Dmitry Obukhov - Hilight code in webcscope
|
||||
David Cohrs - LEX and SUNOS scanner fix
|
||||
Valentin Podlovchenko - Overflow prevention and link recursion fix patch
|
||||
Neil Horman <nhorman@gmail.com> - Various Bug Fixes
|
|
@ -0,0 +1,29 @@
|
|||
Copyright (c) 1998-2000, The Santa Cruz Operation
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
*Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
*Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
*Neither name of The Santa Cruz Operation nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
|
||||
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
|
@ -0,0 +1,636 @@
|
|||
2009-04-10 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/snprintf.c: Replacement implementation for missing snprintf
|
||||
and vsprintf, from www.jhweiss.de.
|
||||
|
||||
* acinclude: New macros to optionally activate a replacement for
|
||||
missing snprintf and vsprintf, from www.jhweiss.de.
|
||||
|
||||
* configure.in: Call new macros for snprintf and vsprintf. Drop
|
||||
AC_FUNC_LSTAT in turn, since it would have required a replacement
|
||||
implementation for lstat().
|
||||
|
||||
* src/Makefile.am (cscope_LDADD): Added LIBOBJS to automatically
|
||||
include snprintf.o in the build if and only if needed.
|
||||
|
||||
* configure, config.h.in, aclocal.m4, Makefile.in,
|
||||
contrib/Makefile.in, doc/Makefile.in, src/Makefile.in:
|
||||
Regenerated.
|
||||
|
||||
* src/global.h: Add prototypes for replacement snprintf and
|
||||
vsnprintf.
|
||||
|
||||
* src/*.c: Replace all calls of sprintf by snprintf to avoid
|
||||
possible buffer overflows.
|
||||
|
||||
2008-06-30 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* aclocal.m4, configure, config.h.in, Makefile.in,
|
||||
src/Makefile.in, doc/Makefile.in, contrib/Makefile.in: Regenerated
|
||||
by recent autotools.
|
||||
|
||||
* compile, config.guess, config.sub, depcomp, install-sh, missing,
|
||||
mkinstalldirs, ylwrap: Updated to version provided by recent
|
||||
autotools.
|
||||
|
||||
* INSTALL.gnu: GNU installation instructions.
|
||||
|
||||
* src/global.h (tempstring): Fix mismatch of declaration with
|
||||
definition.
|
||||
|
||||
2008-04-11 Neil Horman <nhorman@tuxdriver.com>
|
||||
* src/main.c, src/exec.c : configure ncurses to operate in raw
|
||||
mode so that ctrl-c (toggle case sensitivity) isn't swallowed by
|
||||
the terminal driver
|
||||
|
||||
2008-03-12 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/build.c (samelist): Previous fix broke handling of blanks in
|
||||
directory names.
|
||||
(build): Apply the same fix to other occurence of the same code.
|
||||
|
||||
2008-03-10 Neil Horman <nhorman@tuxdriver.com>
|
||||
|
||||
* src/build.c: Fix Samelist to properly absorb newlines so that
|
||||
inverted indicies aren't always rebuilt
|
||||
|
||||
2008-02-14 Neil Horman <nhorman@tuxdriver.com>
|
||||
|
||||
* src/dir.c: Fix up issrcfile to identify hpp/hxx files as
|
||||
standard c++ source files
|
||||
|
||||
* src/main.c: Add myexit as a handler for SIGTERM, to clean up
|
||||
temp files on TERM
|
||||
|
||||
2007-12-03 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* doc/cscope.1: Grammar corrections [SF patch #1843711] and troff
|
||||
syntax fixes [from ESR].
|
||||
|
||||
2007-03-10 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/scanner.l (comment_input): Translate EOF to LEXEOF in this
|
||||
case, too.
|
||||
(input, noncommentinput): Spell out LEXEOF instead of a magic
|
||||
number 0.
|
||||
|
||||
2007-02-09 Neil Horman <nhorman@tuxdriver.com>
|
||||
|
||||
* doc/xcscope.1: Added man page for xcscope utility in contrib
|
||||
|
||||
2007-01-07 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/fscanner.l: Avoid a -Wunused warning by disabling the
|
||||
yy_topstate() function.
|
||||
|
||||
* README: Add a warning about the intended user audience not
|
||||
including superusers or anonymous ones.
|
||||
|
||||
* contrib/webcscope/cscope: Find perl in /usr/bin, which should be
|
||||
more likely as its installation position these days. Put a big
|
||||
red reminder to the top of the generated HTML page warning about
|
||||
the security issues involved with webcscope. Thanks to V-Li and
|
||||
the Gentoo folks for the patch.
|
||||
|
||||
2006-10-23 Neil Horman <nhorman@tuxdriver.com>
|
||||
|
||||
* src/main.c: Update sigwinch_handler to only register if linemode
|
||||
is not specified (SF bug 1574354)
|
||||
|
||||
2006-10-15 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/dir.c (accessible_file): New function to test for file
|
||||
readability more strictly than just access().
|
||||
(inviewpath): Use it to avoid unreadable files (directories, in
|
||||
particular) getting into the srcfilelist, and thus hopefully fix
|
||||
SF bug #1173768.
|
||||
|
||||
2006-10-10 Neil Horman <nhorman@tuxdriver.com>
|
||||
|
||||
* src/main.c: Updated sigwinch_handler to not run in the event
|
||||
that curses is not running to avoid crash (SF bug 1574354)
|
||||
|
||||
2006-09-30 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/fscanner.l (wsnl): Expand set of allowed characters to make
|
||||
scanner more tolerant of non-Unix linebreaks (should fix SF Bug
|
||||
#1563459)
|
||||
|
||||
* src/Makefile.am (CLEANFILES, dist-hook): Commented out, to
|
||||
reduce number of user reports from people without lex.
|
||||
|
||||
* configure.in: Change from AC_PROG_LEX to AM_PROG_LEX.
|
||||
|
||||
* src/Makefile.am (cscope_SOURCES): Added alloc.h. Reindented.
|
||||
|
||||
* src/invlib.c (invnewterm): Correct loop test to account for
|
||||
maxback being unsigned (should fix SF bug #1559495).
|
||||
|
||||
* src/Makefile.am (AM_CPPFLAGS): Renamed from INCLUDES, to quench
|
||||
an automake warning.
|
||||
|
||||
* configure.in: Modernized via autoupdate. Fixed several
|
||||
'underquoted' warnings from aclocal. Use a more telling source
|
||||
file name in AC_CONFIG_SRCDIR.
|
||||
|
||||
* configure, aclocal.m4, Makefile.in, contrib/Makefile.in,
|
||||
doc/Makefile.in, src/Makefile.in: Regenerated.
|
||||
|
||||
2006-08-20 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/find.c (findsymbol): Missed one place where s_len had to be
|
||||
initialized.
|
||||
|
||||
* src/main.c (tempstring): Parametrize length by new macro
|
||||
TEMPSTRING_LEN.
|
||||
(main): Check against too long -f file name.
|
||||
(main): Put explicit %s field widths into fscanf() call.
|
||||
(main): Replace some fscanf() calls by fgets().
|
||||
|
||||
* src/input.c (shellpath): Limit size of strings copied from
|
||||
environment.
|
||||
|
||||
* src/edit.c (editref, editall): Put explicit %s field widths into
|
||||
fscanf() calls.
|
||||
|
||||
* src/display.c (display): Put explicit %s field widths into
|
||||
fscanf() call.
|
||||
|
||||
* src/dir.c (makefilelist): Put explicit %s field width into
|
||||
sscanf() call.
|
||||
|
||||
* src/constants.h (TEMPSTRING_LEN): New macro, needed to
|
||||
parametrize a fscanf() call.
|
||||
(STRINGIZE): New macro used to build the following.
|
||||
(PATLEN_STR, PATHLEN_STR, NUMLEN_STR, TEMPSTRING_LEN_STR): Buffer
|
||||
lengths (minus 1) expressed as a string literal, to be used in as
|
||||
field widths in {f,s}scanf() calls.
|
||||
|
||||
* src/command.c (changestring): Put explicit %s field widths into
|
||||
fscanf() call.
|
||||
|
||||
* src/build.c (samelist, build): fgets() replaces fscanf().
|
||||
(build): Put explicit %s field widths into fscanf() call.
|
||||
|
||||
2006-07-23 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/global.h: Rename putstring() to fetch_string_from_dbase(),
|
||||
add a parameter.
|
||||
|
||||
* src/find.c: Add #include <assert.h>
|
||||
(fetch_string_from_dbase): Renamed from misleading name
|
||||
putstring(). Add new parameter, and use it to avoid overflowing
|
||||
the output buffer.
|
||||
(findsymbol): New local: s_len. Rename calls to putstring(). Add
|
||||
new argument, some of them from s_len.
|
||||
(finddef, findallfcns, findcalling, findinclude, match,
|
||||
findcalledby, putpostingref): Rename calls to putstring(). Add new
|
||||
argument.
|
||||
|
||||
* src/constants.h (MSGLEN): Add safety parentheses.
|
||||
|
||||
* src/library.h: Remove prototypes of alloc.c functions.
|
||||
|
||||
* src/alloc.h: New file. Moved prototypes of alloc.c functions in
|
||||
here, out of library.h.
|
||||
|
||||
* src/alloc.c: Include new header file from here.
|
||||
(my_strdup): Changed name from misleading stralloc(). Remove
|
||||
incorrect cast.
|
||||
|
||||
* src/build.c: Add #include "alloc.h".
|
||||
(fetch_include_from_dbase): Renamed from misleading name
|
||||
putinclude(). Add length of target string as an argument.
|
||||
(setup_build_filenames): Rename calls of stralloc().
|
||||
(getoldfile, copyinverted): Rename calls of putstring(). Add new
|
||||
argument.
|
||||
(copydata, coypinverted): Rename calls of putinclude(). Add new
|
||||
argument.
|
||||
|
||||
* src/vpinit.c: Add #include "alloc.h"
|
||||
(vpinit): Rename calls of stralloc().
|
||||
|
||||
* src/main.c: Add #include "alloc.h".
|
||||
(main): Rename calls of stralloc().
|
||||
|
||||
* src/history.c: Add #include "alloc.h".
|
||||
(addcmd): Rename call of stralloc().
|
||||
|
||||
* src/fscanner.l: Add #include "alloc.h".
|
||||
|
||||
* src/display.c: Add #include "alloc.h".
|
||||
|
||||
* src/dir.c: Add #include "alloc.h". Move project includes above
|
||||
system headers.
|
||||
(sourcedir, addsrcdir, includedir, addincdir, addsrcfile): Rename
|
||||
calls to stralloc().
|
||||
|
||||
* src/crossref.c: Add #include "alloc.h"
|
||||
|
||||
* src/command.c: Add #include "alloc.h".
|
||||
|
||||
2006-05-06 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/fscanner.l: Accept numeric literals inside fcn definitions
|
||||
and calls.
|
||||
|
||||
2006-04-21 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
Make source clean under -Wsign-compare.
|
||||
|
||||
* src/main.c (fileargc): Make counter unsigned.
|
||||
(main): Make local counter unsigned.
|
||||
(main): Fixed two sprintf() excess arguments.
|
||||
|
||||
* src/lookup.c (initsymtab): Make local counters unsigned.
|
||||
|
||||
* src/invlib.c (LINEMAX): Removed.
|
||||
(invmake): Change length of local variable "line" to TERMMAX.
|
||||
(numpost, numlogblk, amtused, nextpost, lastinblk, numinvitems):
|
||||
Make counters unsigned.
|
||||
(invnewterm): Make local counters unsigned.
|
||||
|
||||
* src/input.c (mygetline): Make local counters unsigned.
|
||||
|
||||
* src/find.c (findregexp, findfile): Make local counters unsigned.
|
||||
|
||||
* src/egrep.y (line, left, right, parent): Make unsigned.
|
||||
(enter, cclenter): Return unsigned.
|
||||
(follow): Make argument unsigned.
|
||||
(cclenter, cfoll, cgotofn, member, add, follow): Make local
|
||||
counters unsigned.
|
||||
(cgotofn, member): Cast char to unsigned char, not unsigned int,
|
||||
for use as an index.
|
||||
|
||||
* src/display.c (disprefs, mdisprefs, nextline, topline,
|
||||
totallines): Make unsigned.
|
||||
(search): Removed unused locals.
|
||||
(seekline): Make argument unsigned.
|
||||
|
||||
* src/dir.c (nincdirs, nsrcdirs, nsrcfiles, msrcfiles, mincdirs,
|
||||
msrcdirs, nvpsrcdirs): Make unsigned long.
|
||||
(sourcedir, includedir, makefilelist, incfile, inviewpath): Make
|
||||
local counters unsigned.
|
||||
|
||||
* src/crossref.c (symbols, msymbols): Make unsigned long.
|
||||
(struct symbol): Make elements first, last, length and fcn_level
|
||||
unsigned.
|
||||
(crossref, putcrossref): Make local counters unsigned.
|
||||
|
||||
* src/command.c (curdispline): Make unsigned.
|
||||
(mark): Make argument and local counter unsigned.
|
||||
(command): Make KEY_LL conditional on KEY_LL, not KEY_HOME.
|
||||
(changestring): Made local counter unsigned.
|
||||
|
||||
* src/build.c (build): Change several local ints to unsigned
|
||||
longs.
|
||||
|
||||
* src/global.h: Updated lots of declarations to match the above.
|
||||
|
||||
* src/alloc.c (mymalloc, mycalloc, myrealloc): Make size arguments
|
||||
size_t. Remove pointless casts in several of their callers.
|
||||
|
||||
* src/library.h (mymalloc, mycalloc, myrealloc): Updated
|
||||
prototoypes.
|
||||
|
||||
2006-04-20 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
* src/input.c (askforreturn): If curses is handling the display,
|
||||
redraw the screen before returning, to keep error messages from
|
||||
permanently scrambling the display.
|
||||
|
||||
* configure.in: Add test for <io.h>.
|
||||
|
||||
* configure, config.h.in: Regenerated.
|
||||
|
||||
* src/mypopen.c [HAVE_IO_H]: #include <io.h> it, for the setmode()
|
||||
declaration.
|
||||
|
||||
2006-04-19 Hans-Bernhard Broeker <broeker@physik.rwth-achen.de>
|
||||
|
||||
General change: indentation width of touched areas changed to 4
|
||||
spaces, open braces not on lines of their own, single-line "else
|
||||
if", get rid of (void) casts of unused function return values.
|
||||
|
||||
* src/global.h (select_large): Removed declaration.
|
||||
|
||||
* src/main.c (select_large, main): Removed long unused global.
|
||||
|
||||
* src/dir.c (scan_dir): Get rid of d_ino check --- this field is
|
||||
not reliably present in struct dirent, and doesn't achieve enough
|
||||
to be worth autoconf-ing around. Works around problems compiling on
|
||||
Cygwin release 1.5.19.
|
||||
|
||||
* Makefile.in, aclocal.m4, configure, contrib/Makefile.in,
|
||||
doc/Makefile.in, src/Makefile.in: Regenerated with current auto
|
||||
tools (autoconf-2.59, automake 1.9.6).
|
||||
|
||||
2006-02-21 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/vpinit.c (vpinit): Fix handling of slightly malformed VPATH
|
||||
environment variable contents.
|
||||
|
||||
2005-11-22 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/dir.c (issrcfile): Finally added auto-searching for
|
||||
three-letter C++ file extensions *.tcc, *.cpp, *.cxx. Test all
|
||||
matches to be regular files, not just those with two- and
|
||||
three-character extensions.
|
||||
|
||||
* src/invlib.c: Some cleanup. Replace 0 third argument to fseek
|
||||
by proper SEEK_SET. Got rid of (void) result casts and some
|
||||
function argument casts.
|
||||
(invmake): Fix one sizeof(long)==4 assumption.
|
||||
|
||||
2005-08-16 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/main.c: Uncluttered by removing nitpicky (void) casts.
|
||||
(longusage): Reworked for source legibility even on 80-column
|
||||
displays.
|
||||
(main): If in verbose linemode, print number of references found,
|
||||
first off. Patch from Elad Lahav, for Kscope
|
||||
|
||||
2005-07-08 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/build.c (invname_buf, invpost_buf, reffile_buf): Make
|
||||
modifiable copies of the default file names.
|
||||
(invname, invpost, reffile): Initialize pointers to modifiable
|
||||
copies, rather than to string literals.
|
||||
|
||||
* packages/MSDOS/djmake.bat: Adapt to modern position of ylwrap
|
||||
script.
|
||||
|
||||
* src/command.c (command) [KEY_RESIZE]: Protect by
|
||||
!defined(__DJGPP__). That platform doesn't have sigaction() and
|
||||
associated machinery, nor does it really support terminal size
|
||||
changes to begin with.
|
||||
|
||||
* src/main.c (sigwinch_handler): Likewise.
|
||||
(main): Likewise.
|
||||
|
||||
2005-04-29 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/command.c (command): Additional hotkey mapping of Ctrl-A to
|
||||
same function as Ctrl-Y, like AT&T cscope, to evade Ctrl-Y
|
||||
occupied as the DSUSP signal key on BSD'ish platforms.
|
||||
|
||||
* src/help.c (help): Document additonal hotkey ^A. Mention
|
||||
possible unavailability of some Ctrl keys because of terminal
|
||||
settings.
|
||||
|
||||
2005-03-14 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/input.c (getline): Removed. Was just a minimally simplified
|
||||
copy of mygetline() anyway, and it threatened to collide with a
|
||||
like-named routine in libc.
|
||||
|
||||
* src/global.h (getline): Removed prototype.
|
||||
|
||||
* src/command.c (command): Changed all calls of getline() to
|
||||
mygetline() with an empty string as the first argument.
|
||||
|
||||
* src/egrep.y (memset): Changed #if condition around fallback
|
||||
implementation to match that of the prototype in global.h. Should
|
||||
fix SF bug #1163104 (build failure on FreeBSD).
|
||||
|
||||
2005-02-16 Neil Horman <nhorman@gmail.com>
|
||||
|
||||
* src/command.c (command): Added ifdef KEY_RESIZE around
|
||||
KEY_RESIZE case in switch statement to allow curses
|
||||
libraries which don't support resize events to build
|
||||
|
||||
* src/main.c (main): Added ifdef KEY_RESIZE around
|
||||
SIGWINCH handler and signal registration logic to
|
||||
remove resize code from cscope when building with
|
||||
curses libraries that don't support resize events
|
||||
|
||||
2005-02-04 Neil Horman <nhorman@gmail.com>
|
||||
|
||||
* src/command.c (command): Added KEY_RESIZE event case to
|
||||
command switch to handle window re-drawing when a resize
|
||||
event was received.
|
||||
|
||||
* src/input.c (mygetch): Added error checking of return code
|
||||
to restart call to getch in the event it returned early due
|
||||
to a signal being delivered.
|
||||
|
||||
* src/main.c (main): Registered a signal handler for the
|
||||
SIGWINCH handler which is delivered when a terminal is
|
||||
resized. Handler pushes a KEY_RESIZE event onto the head
|
||||
of the command input queue.
|
||||
|
||||
2005-02-01 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/build.c (build): Keep interactive mode on, even if on a
|
||||
terminal, if verbose mode (-v) was turned on.
|
||||
|
||||
2005-01-31 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/scanner.h: Declare yytext signed on AIX (without stating a
|
||||
version number, for now).
|
||||
|
||||
2005-01-30 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/mypopen.c (mypopen): Make closing argument to execlp() a
|
||||
manifest null pointer, not just a zero.
|
||||
|
||||
2004-12-08 Neil Horman <nhorman@gmail.com>
|
||||
|
||||
* src/dir.c: Fix to dissallow unreadable files from
|
||||
srcfiles list (sourceforge bug number 1040690)
|
||||
|
||||
2004-12-06 Neil Horman <nhorman@gmail.com>
|
||||
|
||||
* src/main.c: Fix for temp file security bug (sourceforge
|
||||
bug number 1062807 / CAN-2004-0970)
|
||||
|
||||
2004-11-22 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* doc/cscope.1: Make ESR happy: change man page summary section to
|
||||
avoid [0-9] syntax.
|
||||
|
||||
2004-10-27 Hans-Bernhard Broeker <broeker@accip02.physik.rwth-aachen.de>
|
||||
|
||||
* src/display.c (search): Replace duplicated code by a call to
|
||||
countrefs(). Duplicate lacked adjustment of column widths in case
|
||||
of very long function/file names. Thanks to Darlene Wong for
|
||||
spotting this.
|
||||
|
||||
* src/global.h (countrefs): Prototype added.
|
||||
|
||||
* src/command.c (countrefs): Made globally available.
|
||||
|
||||
2004-06-23 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/dir.c (makefilelist): Fix broken movement of point_in_line
|
||||
when parsing quoted names. Simplify structure by moving default
|
||||
handling upward.
|
||||
|
||||
2004-06-21 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* contrib/ocs (SYSDIR): Only set to /usr/local/lib/cs if not
|
||||
already set in outside environment. Check that $(SYSDIR) exists
|
||||
before proceeding. From SF patch #976788 by Neil Horman.
|
||||
|
||||
2004-04-30 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/vpinit.c (vpinit): Renamed argument currentdir to
|
||||
current_dir to avoid name clash with same-named global.
|
||||
|
||||
* src/command.c (Pattern): Renamed from "pattern", to avoid
|
||||
multitute of compiler warnings about shadowing by locally defined
|
||||
variables of the same name. Changed all usages of this variable,
|
||||
too.
|
||||
(command): Test for individual KEY_* macros instead of TERMINFO
|
||||
whenever one of the KEY_* macros is referenced. This should
|
||||
reduce the TERMINFO mess a little.
|
||||
|
||||
* src/find.c (read_block): Renamed from "readblock", to avoid name
|
||||
clash with QNX system function of that name. Calls changed
|
||||
accordingly, all over the place.
|
||||
|
||||
* src/display.c: Fix fall-back definition of sigjmp_buf.
|
||||
|
||||
* src/constants.h: Activate TERMINFO for FreeBSD.
|
||||
|
||||
* src/input.c (mygetline): New function. Poor-man's readline
|
||||
imitation. From SF Patch #937310.
|
||||
|
||||
* src/global.h (mygetline): Prototype added.
|
||||
|
||||
* src/command.c (command): Use mygetline() instead of letting
|
||||
ncsurses doing it all. Make Ctrl-B/F special hotkeys that are
|
||||
handled here instead of in mygetline(), to preserve their meaning.
|
||||
|
||||
* packages/cscope.spec: Updated by SF patch #920586 to be more
|
||||
compatible with current expectations.
|
||||
|
||||
2004-02-24 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* configure.in (AC_CHECK_HEADERS): Added check for NSK-Tandem
|
||||
special magic header file <floss.h>.
|
||||
|
||||
* src/global.h [HAVE_FLOSS_H]: Added #include <floss.h> if it
|
||||
exists.
|
||||
|
||||
2004-02-14 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/command.c (countrefs): Fix off-by-one length specification
|
||||
of %s format. Thanks to <anil@recoil.org> for spotting it.
|
||||
|
||||
2004-02-12 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
Fix SF bug #892731: Ctrl-C interruption of search works only once
|
||||
per session.
|
||||
|
||||
* configure.in (sigsetjmp): Added test for presence of this
|
||||
function.
|
||||
|
||||
* src/display.c (sigsetjmp) [!HAVE_SIGSETJMP]: Provide fallback
|
||||
definitions for functions sigsetjmp, siglongjmp and type
|
||||
sigjmp_buf.
|
||||
(search): Move call to signal() above that to setjmp(). Call
|
||||
sigsetjmp() instead of setjmp().
|
||||
|
||||
* configure, config.h.in: Regenerated.
|
||||
|
||||
* Makefile.in, src/Makefile.in, contrib/Makefile.in,
|
||||
doc/Makefile.in, aclocal.m4: Rebuilt by automake-1.7.9.
|
||||
|
||||
|
||||
2004-02-11 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* configure.in (signal.h) Check added.
|
||||
(sighandler_t): Check for this type. Should be defined on POSIX
|
||||
platforms, but is treated as a GNU extension sometimes.
|
||||
|
||||
* src/global.h (sighandler_t) [!HAVE_SIGHANDLER_T]: Provide
|
||||
fallback definition of function pointer typedef for signal
|
||||
handlers if <signal.h> doesn't provide it. Simplifies cscope's
|
||||
work when working on its own source code --- function pointers
|
||||
confuse it quite badly, so it's best to minimize their visibility.
|
||||
|
||||
* src/input.c (mygetch): Type of local variable savesig written
|
||||
using sighandler_t.
|
||||
|
||||
* src/display.c (search): Type of local variable savesig written
|
||||
using sighandler_t.
|
||||
|
||||
* src/exec.c (oldsigtstp): Renamed, from oldsigstp.
|
||||
(oldsigtstp,oldsighup,oldsigquit): Changed from function pointer
|
||||
type to new typedef name sighandler_t.
|
||||
|
||||
2004-02-05 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/global.h (tolower) [BSD]: Fix stupid typo in overrides for
|
||||
toupper and tolower.
|
||||
|
||||
2004-01-08 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/display.c (clearmsg): New function. Does essentially the
|
||||
same thing previously achieved by a rather more cryptic
|
||||
postmsg("").
|
||||
(postfatal): New function to printout a fatal error message and
|
||||
terminate the program. Works like posterr(), but exits curses
|
||||
first, so the message should end up visible after the program
|
||||
exits. Using this instead of posterr()+myexit() fixes SF bug
|
||||
#419510.
|
||||
(dispinit): Use postfatal:().
|
||||
(postmsg): Use clearmsg().
|
||||
(postmsg2): Call curses refresh() after change.
|
||||
|
||||
* src/global.h: Add prototypes for new functions clearmsg() and
|
||||
postfatal().
|
||||
|
||||
* src/find.c (putsource): Use postfatal().
|
||||
|
||||
* src/main.c (main, skiplist): Use postfatal() and clearmsg().
|
||||
|
||||
* src/command.c (command): Use clearmsg().
|
||||
|
||||
* src/build.c (build, seek_to_trailer, movefile): Use postfatal().
|
||||
|
||||
* src/alloc.c (alloctest): Use postfatal().
|
||||
|
||||
* src/display.c (jumpback): Re-instate signal handler, in an
|
||||
attempt to fix problems reported with the general behaviour of
|
||||
signal handlers in cscope.
|
||||
|
||||
* src/scanner.l (ws, wsnl): Two new predefined patterns to catch
|
||||
not only blanks and tabs, but all generally allowed white-space
|
||||
characters in source files: form feeds, vertical tabs, carriage
|
||||
returns. Replaced most occurence of [ \t] and [ \t\n] by these.
|
||||
This is a back-port from fscanner.l. Should fix SF bug #508060.
|
||||
|
||||
Wed Oct 15 16:05:46 2003 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/dir.c (scan_dir): Don't reduce path to basename before
|
||||
calling issrcfile.
|
||||
(issrcfile): Use either basename or full path, as necessary for
|
||||
the individual tests. Reorganized to reduce nesting.
|
||||
|
||||
Mon Sep 15 12:34:46 2003 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/egrep.y (yylex, member, egrep, cgotofn): Reindented. Fixed
|
||||
implicit int declarations and casts.
|
||||
|
||||
* src/global.h (tolower, tolower) [BSD]: Fix override definitions
|
||||
for these so they don't mung non-alphabetic input.
|
||||
|
||||
Fri Sep 12 09:33:19 2003 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
* src/vp.h: Add #include of <sys/types.h> to fix problem on
|
||||
Solaris.
|
||||
|
||||
Fri Sep 12 09:33:19 2003 Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>
|
||||
|
||||
I'm finally starting a new, GNU-format ChangeLog file. The format
|
||||
of the previous was too terse to be really useful. This begins
|
||||
with the first changes after release 15.5.
|
||||
|
||||
* ChangeLog.old: New file. Renamed copy of old-format ChangeLog
|
||||
file.
|
||||
|
||||
* ChangeLog: Started from scratch.
|
||||
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
***** BUILDING:
|
||||
|
||||
This program's build procedure is fairly standard. Try:
|
||||
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
Options to the configure script are up to you. For details, run:
|
||||
|
||||
./configure --help
|
||||
|
||||
Please report build problems at:
|
||||
|
||||
http://sourceforge.net/bugs/?func=addbug&group_id=4664
|
||||
|
||||
(yes, even non-Linux problems).
|
||||
|
||||
|
||||
***** TIPS AND PROBLEMS:
|
||||
|
||||
- Try to use flex as the lexical analyzer. The lex scanner is now
|
||||
separated from the flex version to allow the flex scanner to be
|
||||
optimized. It's also a lot harder to diagnose and debug problems
|
||||
without having full access to the particular platform and its version of
|
||||
lex being used. flex is available everywhere --- AT&T lex is not.
|
||||
|
||||
- On Solaris, the native lex fails to catch our redefinition of YYLMAX
|
||||
early enough, which leads to possible buffer overflows.
|
||||
|
||||
- On Linux systems (and possibly others) configure may fail if lex is
|
||||
a synomyn for flex. To fix, do the following:
|
||||
|
||||
make distclean
|
||||
./configure --with-flex
|
||||
make
|
||||
|
||||
- On HP-UX several problems exist when using configure. Try the following
|
||||
to solve this:
|
||||
|
||||
CFLAGS='-Ae -DYYCHAR_ARRAY' CURSES_LIBS=-lHcurses ./configure
|
||||
|
||||
- On Tru64, formerly known as Digital Unix, formerly known as DEC OSF/1,
|
||||
the system-supplied libcurses causes cscope to terminate itself
|
||||
immediately as it comes back to foreground after being suspended by
|
||||
the user (Ctrl-Z). Using GNU Ncurses instead of OSF1 curses works
|
||||
around the problem. According to the lynx and ncurses people, this
|
||||
is a design problem of curses vs. signal handling, at the heart of it.
|
||||
|
||||
- Solaris 2.8 on Intel hardware may not work using the vendor's curses
|
||||
implementation. Using the free NCurses should help.
|
||||
|
||||
- Some ancient Unix filesytems supported only 14 characters in
|
||||
filenames. cscope no longer cares for that by default. If you want
|
||||
to run it on such a system, #define the macro SHORT_NAMES_ONLY manually
|
||||
(there's a definition in global.h you can uncomment).
|
||||
|
||||
Browse to http://cscope.sourceforge.net for more current information,
|
||||
like reported bugs whose solutions haven't been put into this source
|
||||
distribution yet.
|
|
@ -0,0 +1,6 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = doc src contrib
|
||||
|
||||
EXTRA_DIST = packages
|
||||
|
|
@ -0,0 +1,610 @@
|
|||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
LIBOBJDIR =
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
||||
TODO compile config.guess config.sub depcomp install-sh \
|
||||
missing mkinstalldirs ylwrap
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@
|
||||
CURSES_LIBS = @CURSES_LIBS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GNOME_LINUX_FALSE = @GNOME_LINUX_FALSE@
|
||||
GNOME_LINUX_TRUE = @GNOME_LINUX_TRUE@
|
||||
GREP = @GREP@
|
||||
HAS_CURSES_FALSE = @HAS_CURSES_FALSE@
|
||||
HAS_CURSES_TRUE = @HAS_CURSES_TRUE@
|
||||
HAS_GNOME_FALSE = @HAS_GNOME_FALSE@
|
||||
HAS_GNOME_TRUE = @HAS_GNOME_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
USING_GNOME2_FALSE = @USING_GNOME2_FALSE@
|
||||
USING_GNOME2_TRUE = @USING_GNOME2_TRUE@
|
||||
USING_LEX_FALSE = @USING_LEX_FALSE@
|
||||
USING_LEX_TRUE = @USING_LEX_TRUE@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
gnome1 = @gnome1@
|
||||
gnome2 = @gnome2@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
SUBDIRS = doc src contrib
|
||||
EXTRA_DIST = packages
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-recursive ctags \
|
||||
ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
|
||||
dist-tarZ dist-zip distcheck distclean distclean-generic \
|
||||
distclean-hdr distclean-recursive distclean-tags \
|
||||
distcleancheck distdir distuninstallcheck dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-generic mostlyclean-recursive pdf \
|
||||
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -0,0 +1,4 @@
|
|||
2003/09/04 - Release of version 15.5.
|
||||
2002/08/15 - Release of version 15.4.
|
||||
2001/07/02 - Release of version 15.3.
|
||||
2000/04/18 - Release of Version 13.0 into Open Source. Initial Linux port
|
|
@ -0,0 +1,31 @@
|
|||
Cscope is a text screen based source browsing tool. Although it is
|
||||
primarily designed to search C code (including lex and yacc files), it
|
||||
can also be used for C++ code.
|
||||
|
||||
Using cscope, you can easily search for where symbols are used and
|
||||
defined. Cscope is designed to answer questions like:
|
||||
|
||||
Where is this variable used?
|
||||
What is the value of this preprocessor symbol?
|
||||
Where is this function in the source files?
|
||||
What functions call this function?
|
||||
What functions are called by this function?
|
||||
Where does the message "out of space" come from?
|
||||
Where is this source file in the directory structure?
|
||||
What files include this header file?
|
||||
|
||||
It has been released by The Santa Cruz Operation, Inc as Open Source
|
||||
under the BSD license. Please look at COPYING for a detailed
|
||||
description of the license.
|
||||
|
||||
For instructions on how to build and install cscope, see the file,
|
||||
"INSTALL".
|
||||
|
||||
One thing to be pointed out is that this is ancient Unix software
|
||||
predating much of today's security concerns. While we do try to
|
||||
address safety issues as we learn about them, it must be said that
|
||||
this is in no way hardened or secure software. It's designed to be
|
||||
used by developers, not administrators or anonymous users.
|
||||
|
||||
Browse to http://cscope.sourceforge.net for more current information
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
Open
|
||||
|
||||
+ Display the current case mode (^C) onscreen
|
||||
|
||||
+ emacs like key bindings
|
||||
^S for searching (^Y)
|
||||
Up/dwn Arrow support Next/Prev field. ??
|
||||
Inline editing on Input fields ( ??^B/^F )
|
||||
^X^C to quit ( ^Q ??)
|
||||
Pagdwn/PageUp/+/-
|
||||
|
||||
+ Same capabilities as interactive in non interactive (one shot) mode
|
||||
|
||||
+ Provide some how-do-I-use-this-thing doc.
|
||||
|
||||
+ Replace invlib.[ch] by real database. Failing that, at least sanitize it.
|
||||
|
||||
Possible changes:
|
||||
|
||||
? Change to full screen target display and use bottom line for command,
|
||||
control or fn keys for operations (cf pine)
|
||||
|
||||
? Apply added capability from osr5 codebase
|
||||
|
|
@ -0,0 +1,230 @@
|
|||
# $Id: acinclude.m4,v 1.1 2009/04/10 13:39:22 broeker Exp $
|
||||
|
||||
# Copyright (c) 2008 Holger Weiss <holger@jhweiss.de>.
|
||||
#
|
||||
# This code may freely be used, modified and/or redistributed for any purpose.
|
||||
# It would be nice if additions and fixes to this file (including trivial code
|
||||
# cleanups) would be sent back in order to let me include them in the version
|
||||
# available at <http://www.jhweiss.de/software/snprintf.html>. However, this is
|
||||
# not a requirement for using or redistributing (possibly modified) versions of
|
||||
# this file, nor is leaving this notice intact mandatory.
|
||||
|
||||
# HW_HEADER_STDARG_H
|
||||
# ------------------
|
||||
# Define HAVE_STDARG_H to 1 if <stdarg.h> is available.
|
||||
AC_DEFUN([HW_HEADER_STDARG_H],
|
||||
[
|
||||
AC_PREREQ([2.60])dnl Older releases should work if AC_CHECK_HEADERS is used.
|
||||
AC_CHECK_HEADERS_ONCE([stdarg.h])
|
||||
])# HW_HEADER_STDARG_H
|
||||
|
||||
# HW_HEADER_VARARGS_H
|
||||
# -------------------
|
||||
# Define HAVE_VARARGS_H to 1 if <varargs.h> is available.
|
||||
AC_DEFUN([HW_HEADER_VARARGS_H],
|
||||
[
|
||||
AC_PREREQ([2.60])dnl Older releases should work if AC_CHECK_HEADERS is used.
|
||||
AC_CHECK_HEADERS_ONCE([varargs.h])
|
||||
])# HW_HEADER_VARARGS_H
|
||||
|
||||
# HW_FUNC_VA_COPY
|
||||
# ---------------
|
||||
# Set $hw_cv_func_va_copy to "yes" or "no". Define HAVE_VA_COPY to 1 if
|
||||
# $hw_cv_func_va_copy is set to "yes". Note that it's "unspecified whether
|
||||
# va_copy and va_end are macros or identifiers declared with external linkage."
|
||||
# (C99: 7.15.1, 1) Therefore, the presence of va_copy(3) cannot simply "be
|
||||
# tested with #ifdef", as suggested by the Autoconf manual (5.5.1).
|
||||
AC_DEFUN([HW_FUNC_VA_COPY],
|
||||
[
|
||||
AC_REQUIRE([HW_HEADER_STDARG_H])dnl Our check evaluates HAVE_STDARG_H.
|
||||
AC_REQUIRE([HW_HEADER_VARARGS_H])dnl Our check evaluates HAVE_VARARGS_H.
|
||||
AC_CACHE_CHECK([for va_copy],
|
||||
[hw_cv_func_va_copy],
|
||||
[AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#if HAVE_STDARG_H
|
||||
#include <stdarg.h>
|
||||
#elif HAVE_VARARGS_H
|
||||
#include <varargs.h>
|
||||
#endif]],
|
||||
[[va_list ap, aq; va_copy(aq, ap);]])],
|
||||
[hw_cv_func_va_copy=yes],
|
||||
[hw_cv_func_va_copy=no],
|
||||
[hw_cv_func_va_copy=no])])
|
||||
AS_IF([test "$hw_cv_func_va_copy" = yes],
|
||||
[AC_DEFINE([HAVE_VA_COPY], [1],
|
||||
[Define to 1 if you have the `va_copy' function or macro.])])
|
||||
])# HW_FUNC_VA_COPY
|
||||
|
||||
# HW_FUNC___VA_COPY
|
||||
# -----------------
|
||||
# Set $hw_cv_func___va_copy to "yes" or "no". Define HAVE___VA_COPY to 1 if
|
||||
# $hw_cv_func___va_copy is set to "yes".
|
||||
AC_DEFUN([HW_FUNC___VA_COPY],
|
||||
[
|
||||
AC_REQUIRE([HW_HEADER_STDARG_H])dnl Our check evaluates HAVE_STDARG_H.
|
||||
AC_REQUIRE([HW_HEADER_VARARGS_H])dnl Our check evaluates HAVE_VARARGS_H.
|
||||
AC_CACHE_CHECK([for __va_copy],
|
||||
[hw_cv_func___va_copy],
|
||||
[AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#if HAVE_STDARG_H
|
||||
#include <stdarg.h>
|
||||
#elif HAVE_VARARGS_H
|
||||
#include <varargs.h>
|
||||
#endif]],
|
||||
[[va_list ap, aq; __va_copy(aq, ap);]])],
|
||||
[hw_cv_func___va_copy=yes],
|
||||
[hw_cv_func___va_copy=no],
|
||||
[hw_cv_func___va_copy=no])])
|
||||
AS_IF([test "$hw_cv_func___va_copy" = yes],
|
||||
[AC_DEFINE([HAVE___VA_COPY], [1],
|
||||
[Define to 1 if you have the `__va_copy' function or macro.])])
|
||||
])# HW_FUNC___VA_COPY
|
||||
|
||||
# HW_FUNC_VSNPRINTF
|
||||
# -----------------
|
||||
# Set $hw_cv_func_vsnprintf and $hw_cv_func_vsnprintf_c99 to "yes" or "no",
|
||||
# respectively. Define HAVE_VSNPRINTF to 1 only if $hw_cv_func_vsnprintf_c99
|
||||
# is set to "yes". Otherwise, define vsnprintf to rpl_vsnprintf and make sure
|
||||
# the replacement function will be built.
|
||||
AC_DEFUN([HW_FUNC_VSNPRINTF],
|
||||
[
|
||||
AC_PREREQ([2.60])dnl 2.59 should work if some AC_TYPE_* macros are replaced.
|
||||
AC_REQUIRE([HW_HEADER_STDARG_H])dnl Our check evaluates HAVE_STDARG_H.
|
||||
AC_CHECK_FUNC([vsnprintf],
|
||||
[hw_cv_func_vsnprintf=yes],
|
||||
[hw_cv_func_vsnprintf=no])
|
||||
AS_IF([test "$hw_cv_func_vsnprintf" = yes],
|
||||
[AC_CACHE_CHECK([whether vsnprintf is C99 compliant],
|
||||
[hw_cv_func_vsnprintf_c99],
|
||||
[AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#if HAVE_STDARG_H
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
static int testprintf(char *buf, size_t size, const char *format, ...)
|
||||
{
|
||||
int result;
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
result = vsnprintf(buf, size, format, ap);
|
||||
va_end(ap);
|
||||
return result;
|
||||
}]],
|
||||
[[char buf[43];
|
||||
if (testprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
|
||||
testprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
|
||||
buf[0] != 'T' || buf[3] != '\0')
|
||||
return 1;]])],
|
||||
[hw_cv_func_vsnprintf_c99=yes],
|
||||
[hw_cv_func_vsnprintf_c99=no],
|
||||
[hw_cv_func_vsnprintf_c99=no])])],
|
||||
[hw_cv_func_snprintf_c99=no])
|
||||
AS_IF([test "$hw_cv_func_vsnprintf_c99" = yes],
|
||||
[AC_DEFINE([HAVE_VSNPRINTF], [1],
|
||||
[Define to 1 if you have a C99 compliant `vsnprintf' function.])],
|
||||
[AC_DEFINE([vsnprintf], [rpl_vsnprintf],
|
||||
[Define to rpl_vsnprintf if the replacement function should be used.])
|
||||
AC_CHECK_HEADERS([inttypes.h locale.h stddef.h stdint.h])
|
||||
AC_CHECK_MEMBERS([struct lconv.decimal_point, struct lconv.thousands_sep],
|
||||
[], [], [#include <locale.h>])
|
||||
AC_TYPE_LONG_DOUBLE
|
||||
AC_TYPE_LONG_LONG_INT
|
||||
AC_TYPE_UNSIGNED_LONG_LONG_INT
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_INTMAX_T
|
||||
AC_TYPE_UINTMAX_T
|
||||
AC_TYPE_UINTPTR_T
|
||||
AC_CHECK_TYPES([ptrdiff_t])
|
||||
AC_CHECK_FUNCS([localeconv])
|
||||
_HW_FUNC_XPRINTF_REPLACE])
|
||||
])# HW_FUNC_VSNPRINTF
|
||||
|
||||
# HW_FUNC_SNPRINTF
|
||||
# ----------------
|
||||
# Set $hw_cv_func_snprintf and $hw_cv_func_snprintf_c99 to "yes" or "no",
|
||||
# respectively. Define HAVE_SNPRINTF to 1 only if $hw_cv_func_snprintf_c99
|
||||
# is set to "yes". Otherwise, define snprintf to rpl_snprintf and make sure
|
||||
# the replacement function will be built.
|
||||
AC_DEFUN([HW_FUNC_SNPRINTF],
|
||||
[
|
||||
AC_REQUIRE([HW_FUNC_VSNPRINTF])dnl Our snprintf(3) calls vsnprintf(3).
|
||||
AC_CHECK_FUNC([snprintf],
|
||||
[hw_cv_func_snprintf=yes],
|
||||
[hw_cv_func_snprintf=no])
|
||||
AS_IF([test "$hw_cv_func_snprintf" = yes],
|
||||
[AC_CACHE_CHECK([whether snprintf is C99 compliant],
|
||||
[hw_cv_func_snprintf_c99],
|
||||
[AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <stdio.h>]],
|
||||
[[char buf[43];
|
||||
if (snprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
|
||||
snprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
|
||||
buf[0] != 'T' || buf[3] != '\0')
|
||||
return 1;]])],
|
||||
[hw_cv_func_snprintf_c99=yes],
|
||||
[hw_cv_func_snprintf_c99=no],
|
||||
[hw_cv_func_snprintf_c99=no])])],
|
||||
[hw_cv_func_snprintf_c99=no])
|
||||
AS_IF([test "$hw_cv_func_snprintf_c99" = yes],
|
||||
[AC_DEFINE([HAVE_SNPRINTF], [1],
|
||||
[Define to 1 if you have a C99 compliant `snprintf' function.])],
|
||||
[AC_DEFINE([snprintf], [rpl_snprintf],
|
||||
[Define to rpl_snprintf if the replacement function should be used.])
|
||||
_HW_FUNC_XPRINTF_REPLACE])
|
||||
])# HW_FUNC_SNPRINTF
|
||||
|
||||
# HW_FUNC_VASPRINTF
|
||||
# -----------------
|
||||
# Set $hw_cv_func_vasprintf to "yes" or "no". Define HAVE_VASPRINTF to 1 if
|
||||
# $hw_cv_func_vasprintf is set to "yes". Otherwise, define vasprintf to
|
||||
# rpl_vasprintf and make sure the replacement function will be built.
|
||||
AC_DEFUN([HW_FUNC_VASPRINTF],
|
||||
[
|
||||
AC_REQUIRE([HW_FUNC_VSNPRINTF])dnl Our vasprintf(3) calls vsnprintf(3).
|
||||
AC_CHECK_FUNCS([vasprintf],
|
||||
[hw_cv_func_vasprintf=yes],
|
||||
[hw_cv_func_vasprintf=no])
|
||||
AS_IF([test "$hw_cv_func_vasprintf" = no],
|
||||
[AC_DEFINE([vasprintf], [rpl_vasprintf],
|
||||
[Define to rpl_vasprintf if the replacement function should be used.])
|
||||
AC_CHECK_HEADERS([stdlib.h])
|
||||
HW_FUNC_VA_COPY
|
||||
AS_IF([test "$hw_cv_func_va_copy" = no],
|
||||
[HW_FUNC___VA_COPY])
|
||||
_HW_FUNC_XPRINTF_REPLACE])
|
||||
])# HW_FUNC_VASPRINTF
|
||||
|
||||
# HW_FUNC_ASPRINTF
|
||||
# ----------------
|
||||
# Set $hw_cv_func_asprintf to "yes" or "no". Define HAVE_ASPRINTF to 1 if
|
||||
# $hw_cv_func_asprintf is set to "yes". Otherwise, define asprintf to
|
||||
# rpl_asprintf and make sure the replacement function will be built.
|
||||
AC_DEFUN([HW_FUNC_ASPRINTF],
|
||||
[
|
||||
AC_REQUIRE([HW_FUNC_VASPRINTF])dnl Our asprintf(3) calls vasprintf(3).
|
||||
AC_CHECK_FUNCS([asprintf],
|
||||
[hw_cv_func_asprintf=yes],
|
||||
[hw_cv_func_asprintf=no])
|
||||
AS_IF([test "$hw_cv_func_asprintf" = no],
|
||||
[AC_DEFINE([asprintf], [rpl_asprintf],
|
||||
[Define to rpl_asprintf if the replacement function should be used.])
|
||||
_HW_FUNC_XPRINTF_REPLACE])
|
||||
])# HW_FUNC_ASPRINTF
|
||||
|
||||
# _HW_FUNC_XPRINTF_REPLACE
|
||||
# ------------------------
|
||||
# Arrange for building snprintf.c. Must be called if one or more of the
|
||||
# functions provided by snprintf.c are needed.
|
||||
AC_DEFUN([_HW_FUNC_XPRINTF_REPLACE],
|
||||
[
|
||||
AS_IF([test "x$_hw_cv_func_xprintf_replace_done" != xyes],
|
||||
[AC_C_CONST
|
||||
HW_HEADER_STDARG_H
|
||||
AC_LIBOBJ([snprintf])
|
||||
_hw_cv_func_xprintf_replace_done=yes])
|
||||
])# _HW_FUNC_XPRINTF_REPLACE
|
||||
|
||||
dnl vim: set joinspaces textwidth=80:
|
|
@ -0,0 +1,872 @@
|
|||
# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
# generated from the m4 files accompanying Automake X.Y.
|
||||
AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
|
||||
|
||||
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||
# -------------------------------
|
||||
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.9.6])])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
#
|
||||
# Of course, Automake must honor this variable whenever it calls a
|
||||
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||
# depending on how configure is run. This is pretty annoying, since
|
||||
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||
# source directory, any form will work fine, but in subdirectories a
|
||||
# relative path needs to be adjusted first.
|
||||
#
|
||||
# $ac_aux_dir/missing
|
||||
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||
# $top_srcdir/$ac_aux_dir/missing
|
||||
# fails if $ac_aux_dir is absolute,
|
||||
# fails when called from a subdirectory in a VPATH build with
|
||||
# a relative $ac_aux_dir
|
||||
#
|
||||
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||
# harmless because $srcdir is `.', but things will broke when you
|
||||
# start a VPATH build or use an absolute $srcdir.
|
||||
#
|
||||
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||
# and then we would define $MISSING as
|
||||
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# This will work as long as MISSING is not called from configure, because
|
||||
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||
# However there are other variables, like CC, which are often used in
|
||||
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||
#
|
||||
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||
# configured tree to be moved without reconfiguration.
|
||||
|
||||
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||
[dnl Rely on autoconf to set up CDPATH properly.
|
||||
AC_PREREQ([2.50])dnl
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
])
|
||||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 7
|
||||
|
||||
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
||||
# -------------------------------------
|
||||
# Define a conditional.
|
||||
AC_DEFUN([AM_CONDITIONAL],
|
||||
[AC_PREREQ(2.52)dnl
|
||||
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
||||
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
||||
AC_SUBST([$1_TRUE])
|
||||
AC_SUBST([$1_FALSE])
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
$1_FALSE='#'
|
||||
else
|
||||
$1_TRUE='#'
|
||||
$1_FALSE=
|
||||
fi
|
||||
AC_CONFIG_COMMANDS_PRE(
|
||||
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
||||
AC_MSG_ERROR([[conditional "$1" was never defined.
|
||||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
# will think it sees a *use*, and therefore will trigger all it's
|
||||
# C support machinery. Also note that it means that autoscan, seeing
|
||||
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
||||
|
||||
|
||||
# _AM_DEPENDENCIES(NAME)
|
||||
# ----------------------
|
||||
# See how the compiler implements dependency checking.
|
||||
# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
||||
# We try a few techniques and use that to set a single cache variable.
|
||||
#
|
||||
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
||||
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
||||
# dependency, and given that the user is not expected to run this macro,
|
||||
# just rely on AC_PROG_CC.
|
||||
AC_DEFUN([_AM_DEPENDENCIES],
|
||||
[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
||||
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
||||
AC_REQUIRE([AM_DEP_TRACK])dnl
|
||||
|
||||
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
||||
[$1], CXX, [depcc="$CXX" am_compiler_list=],
|
||||
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
||||
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
||||
[depcc="$$1" am_compiler_list=])
|
||||
|
||||
AC_CACHE_CHECK([dependency style of $depcc],
|
||||
[am_cv_$1_dependencies_compiler_type],
|
||||
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
||||
# We make a subdir and do the tests there. Otherwise we can end up
|
||||
# making bogus files that we don't know about and never remove. For
|
||||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
cp "$am_depcomp" conftest.dir
|
||||
cd conftest.dir
|
||||
# We will build objects and dependencies in a subdirectory because
|
||||
# it helps to detect inapplicable dependency modes. For instance
|
||||
# both Tru64's cc and ICC support -MD to output dependencies as a
|
||||
# side effect of compilation, but ICC will put the dependencies in
|
||||
# the current directory while Tru64 will put them in the object
|
||||
# directory.
|
||||
mkdir sub
|
||||
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
if test "$am_compiler_list" = ""; then
|
||||
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
||||
fi
|
||||
for depmode in $am_compiler_list; do
|
||||
# Setup a source with many dependencies, because some compilers
|
||||
# like to wrap large dependency lists on column 80 (with \), and
|
||||
# we should not choose a depcomp mode which is confused by this.
|
||||
#
|
||||
# We need to recreate these files for each test, as the compiler may
|
||||
# overwrite some of them when testing with obscure command lines.
|
||||
# This happens at least with the AIX C compiler.
|
||||
: > sub/conftest.c
|
||||
for i in 1 2 3 4 5 6; do
|
||||
echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
||||
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
||||
# Solaris 8's {/usr,}/bin/sh.
|
||||
touch sub/conftst$i.h
|
||||
done
|
||||
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
||||
|
||||
case $depmode in
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
# We check with `-c' and `-o' for the sake of the "dashmstdout"
|
||||
# mode. It turns out that the SunPro C++ compiler does not properly
|
||||
# handle `-M -o', and we need to detect this.
|
||||
if depmode=$depmode \
|
||||
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
|
||||
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
||||
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
|
||||
>/dev/null 2>conftest.err &&
|
||||
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
|
||||
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
||||
# icc doesn't choke on unknown options, it will just issue warnings
|
||||
# or remarks (even with -Werror). So we grep stderr for any message
|
||||
# that says an option was ignored or not supported.
|
||||
# When given -MP, icc 7.0 and 7.1 complain thusly:
|
||||
# icc: Command line warning: ignoring option '-M'; no argument required
|
||||
# The diagnosis changed in icc 8.0:
|
||||
# icc: Command line remark: option '-MP' not supported
|
||||
if (grep 'ignoring option' conftest.err ||
|
||||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
||||
am_cv_$1_dependencies_compiler_type=$depmode
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf conftest.dir
|
||||
else
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
||||
AM_CONDITIONAL([am__fastdep$1], [
|
||||
test "x$enable_dependency_tracking" != xno \
|
||||
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
||||
])
|
||||
|
||||
|
||||
# AM_SET_DEPDIR
|
||||
# -------------
|
||||
# Choose a directory name for dependency files.
|
||||
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
||||
AC_DEFUN([AM_SET_DEPDIR],
|
||||
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_DEP_TRACK
|
||||
# ------------
|
||||
AC_DEFUN([AM_DEP_TRACK],
|
||||
[AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
#serial 3
|
||||
|
||||
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# ------------------------------
|
||||
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[for mf in $CONFIG_FILES; do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named `Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# So let's grep whole file.
|
||||
if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
|
||||
dirpart=`AS_DIRNAME("$mf")`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running `make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n 's/^U = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`AS_DIRNAME(["$file"])`
|
||||
AS_MKDIR_P([$dirpart/$fdir])
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
|
||||
# AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# -----------------------------
|
||||
# This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
#
|
||||
# This code is only required when automatic dependency tracking
|
||||
# is enabled. FIXME. This creates each `.P' file that we will
|
||||
# need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AC_CONFIG_COMMANDS([depfiles],
|
||||
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
||||
])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 12
|
||||
|
||||
# This macro actually does too much. Some checks are only needed if
|
||||
# your package does certain things. But this isn't really a big deal.
|
||||
|
||||
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
# The call with PACKAGE and VERSION arguments is the old style
|
||||
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||
# and VERSION should now be passed to AC_INIT and removed from
|
||||
# the call to AM_INIT_AUTOMAKE.
|
||||
# We support both call styles for the transition. After
|
||||
# the next Automake release, Autoconf can make the AC_INIT
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.58])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||
# test to see if srcdir already configured
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`" &&
|
||||
test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
|
||||
# test whether we have cygpath
|
||||
if test -z "$CYGPATH_W"; then
|
||||
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||
CYGPATH_W='cygpath -w'
|
||||
else
|
||||
CYGPATH_W=echo
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CYGPATH_W])
|
||||
|
||||
# Define the identity of the package.
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
[_AM_SET_OPTIONS([$1])dnl
|
||||
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||
|
||||
_AM_IF_OPTION([no-define],,
|
||||
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||
|
||||
# Some tools Automake needs.
|
||||
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AM_PROG_INSTALL_SH
|
||||
AM_PROG_INSTALL_STRIP
|
||||
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||
[_AM_PROG_TAR([v7])])])
|
||||
_AM_IF_OPTION([no-dependencies],,
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||
[_AM_DEPENDENCIES(CC)],
|
||||
[define([AC_PROG_CC],
|
||||
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||
[_AM_DEPENDENCIES(CXX)],
|
||||
[define([AC_PROG_CXX],
|
||||
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
|
||||
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||
# loop where config.status creates the headers, so we can generate
|
||||
# our stamp files there.
|
||||
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||
[# Compute $1's index in $config_headers.
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$1 | $1:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
install_sh=${install_sh-"$am_aux_dir/install-sh"}
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# Check whether the underlying file-system supports filenames
|
||||
# with a leading dot. For instance MS-DOS doesn't.
|
||||
AC_DEFUN([AM_SET_LEADING_DOT],
|
||||
[rm -rf .tst 2>/dev/null
|
||||
mkdir .tst 2>/dev/null
|
||||
if test -d .tst; then
|
||||
am__leading_dot=.
|
||||
else
|
||||
am__leading_dot=_
|
||||
fi
|
||||
rmdir .tst 2>/dev/null
|
||||
AC_SUBST([am__leading_dot])])
|
||||
|
||||
# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5
|
||||
|
||||
# AM_PROG_LEX
|
||||
# -----------
|
||||
# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
|
||||
# "missing" invocation, for better error output.
|
||||
AC_DEFUN([AM_PROG_LEX],
|
||||
[AC_PREREQ(2.50)dnl
|
||||
AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
|
||||
AC_REQUIRE([AC_PROG_LEX])dnl
|
||||
if test "$LEX" = :; then
|
||||
LEX=${am_missing_run}flex
|
||||
fi])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 3
|
||||
|
||||
# AM_MAKE_INCLUDE()
|
||||
# -----------------
|
||||
# Check to see how make treats includes.
|
||||
AC_DEFUN([AM_MAKE_INCLUDE],
|
||||
[am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
am__doit:
|
||||
@echo done
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
AC_MSG_CHECKING([for style of include used by $am_make])
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# We grep out `Entering directory' and `Leaving directory'
|
||||
# messages which can occur if `w' ends up in MAKEFLAGS.
|
||||
# In particular we don't look at `^make:' because GNU make might
|
||||
# be invoked under some other name (usually "gmake"), in which
|
||||
# case it prints its new name instead of `make'.
|
||||
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
fi
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([am__include])
|
||||
AC_SUBST([am__quote])
|
||||
AC_MSG_RESULT([$_am_result])
|
||||
rm -f confinc confmf
|
||||
])
|
||||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||
# ------------------------------
|
||||
AC_DEFUN([AM_MISSING_PROG],
|
||||
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
|
||||
#
|
||||
# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
|
||||
# created by `make install' are always world readable, even if the
|
||||
# installer happens to have an overly restrictive umask (e.g. 077).
|
||||
# This was a mistake. There are at least two reasons why we must not
|
||||
# use `-m 0755':
|
||||
# - it causes special bits like SGID to be ignored,
|
||||
# - it may be too restrictive (some setups expect 775 directories).
|
||||
#
|
||||
# Do not use -m 0755 and let people choose whatever they expect by
|
||||
# setting umask.
|
||||
#
|
||||
# We cannot accept any implementation of `mkdir' that recognizes `-p'.
|
||||
# Some implementations (such as Solaris 8's) are not thread-safe: if a
|
||||
# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
|
||||
# concurrently, both version can detect that a/ is missing, but only
|
||||
# one can create it and the other will error out. Consequently we
|
||||
# restrict ourselves to GNU make (using the --version option ensures
|
||||
# this.)
|
||||
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||
[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
|
||||
# We used to keeping the `.' as first argument, in order to
|
||||
# allow $(mkdir_p) to be used without argument. As in
|
||||
# $(mkdir_p) $(somedir)
|
||||
# where $(somedir) is conditionally defined. However this is wrong
|
||||
# for two reasons:
|
||||
# 1. if the package is installed by a user who cannot write `.'
|
||||
# make install will fail,
|
||||
# 2. the above comment should most certainly read
|
||||
# $(mkdir_p) $(DESTDIR)$(somedir)
|
||||
# so it does not work when $(somedir) is undefined and
|
||||
# $(DESTDIR) is not.
|
||||
# To support the latter case, we have to write
|
||||
# test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
|
||||
# so the `.' trick is pointless.
|
||||
mkdir_p='mkdir -p --'
|
||||
else
|
||||
# On NextStep and OpenStep, the `mkdir' command does not
|
||||
# recognize any option. It will interpret all options as
|
||||
# directories to create, and then abort because `.' already
|
||||
# exists.
|
||||
for d in ./-p ./--version;
|
||||
do
|
||||
test -d $d && rmdir $d
|
||||
done
|
||||
# $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
|
||||
if test -f "$ac_aux_dir/mkinstalldirs"; then
|
||||
mkdir_p='$(mkinstalldirs)'
|
||||
else
|
||||
mkdir_p='$(install_sh) -d'
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([mkdir_p])])
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 3
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
||||
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||
# -------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_SANITY_CHECK
|
||||
# ---------------
|
||||
AC_DEFUN([AM_SANITY_CHECK],
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftest.file
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
|
||||
if test "$[*]" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t $srcdir/configure conftest.file`
|
||||
fi
|
||||
rm -f conftest.file
|
||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "$[2]" = conftest.file
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
# specify the program used to strip binaries. This is especially
|
||||
# annoying in cross-compiling environments, where the build's strip
|
||||
# is unlikely to handle the host's binaries.
|
||||
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||
# always use install-sh in `make install-strip', and initialize
|
||||
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
# Installed binaries are usually stripped using `strip' when the user
|
||||
# run `make install-strip'. However `strip' might not be the right
|
||||
# tool to use in cross-compilation environments, therefore Automake
|
||||
# will honor the `STRIP' environment variable to overrule this program.
|
||||
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||
if test "$cross_compiling" != no; then
|
||||
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||
fi
|
||||
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_PROG_TAR(FORMAT)
|
||||
# --------------------
|
||||
# Check how to create a tarball in format FORMAT.
|
||||
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||
#
|
||||
# Substitute a variable $(am__tar) that is a command
|
||||
# writing to stdout a FORMAT-tarball containing the directory
|
||||
# $tardir.
|
||||
# tardir=directory && $(am__tar) > result.tar
|
||||
#
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||
# Do not fold the above two line into one, because Tru64 sh and
|
||||
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||
for _am_tool in $_am_tools
|
||||
do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
AM_RUN_LOG([$_am_tar --version]) && break
|
||||
done
|
||||
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||
am__untar="$_am_tar -xf -"
|
||||
;;
|
||||
plaintar)
|
||||
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||
# ustar tarball either.
|
||||
(tar --version) >/dev/null 2>&1 && continue
|
||||
am__tar='tar chf - "$$tardir"'
|
||||
am__tar_='tar chf - "$tardir"'
|
||||
am__untar='tar xf -'
|
||||
;;
|
||||
pax)
|
||||
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||
am__untar='pax -r'
|
||||
;;
|
||||
cpio)
|
||||
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||
am__untar='cpio -i -H $1 -d'
|
||||
;;
|
||||
none)
|
||||
am__tar=false
|
||||
am__tar_=false
|
||||
am__untar=false
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the value was cached, stop now. We just wanted to have am__tar
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||
rm -rf conftest.dir
|
||||
if test -s conftest.tar; then
|
||||
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||
fi
|
||||
done
|
||||
rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([acinclude.m4])
|
|
@ -0,0 +1,142 @@
|
|||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand `-c -o'.
|
||||
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file `INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
eat=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we strip `-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,258 @@
|
|||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* We're using a BSD-flavoured Unix */
|
||||
#undef BSD
|
||||
|
||||
/* Found some version of curses that we're going to use */
|
||||
#undef HAS_CURSES
|
||||
|
||||
/* Define to 1 if you have the `asprintf' function. */
|
||||
#undef HAVE_ASPRINTF
|
||||
|
||||
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_DIRENT_H
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define to 1 if you have the `fixkeypad' function. */
|
||||
#undef HAVE_FIXKEYPAD
|
||||
|
||||
/* Define to 1 if you have the <floss.h> header file. */
|
||||
#undef HAVE_FLOSS_H
|
||||
|
||||
/* Define to 1 if you have the `getcwd' function. */
|
||||
#undef HAVE_GETCWD
|
||||
|
||||
/* Define to 1 if the system has the type `intmax_t'. */
|
||||
#undef HAVE_INTMAX_T
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <io.h> header file. */
|
||||
#undef HAVE_IO_H
|
||||
|
||||
/* Define to 1 if you have the `regex' library (-lregex). */
|
||||
#undef HAVE_LIBREGEX
|
||||
|
||||
/* Define to 1 if you have the `localeconv' function. */
|
||||
#undef HAVE_LOCALECONV
|
||||
|
||||
/* Define to 1 if you have the <locale.h> header file. */
|
||||
#undef HAVE_LOCALE_H
|
||||
|
||||
/* Define to 1 if the system has the type `long double'. */
|
||||
#undef HAVE_LONG_DOUBLE
|
||||
|
||||
/* Define to 1 if the system has the type `long long int'. */
|
||||
#undef HAVE_LONG_LONG_INT
|
||||
|
||||
/* Define to 1 if you have the `lstat' function. */
|
||||
#undef HAVE_LSTAT
|
||||
|
||||
/* Define to 1 if you have the `memcpy' function. */
|
||||
#undef HAVE_MEMCPY
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `memset' function. */
|
||||
#undef HAVE_MEMSET
|
||||
|
||||
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||
#undef HAVE_NDIR_H
|
||||
|
||||
/* Define to 1 if the system has the type `ptrdiff_t'. */
|
||||
#undef HAVE_PTRDIFF_T
|
||||
|
||||
/* Define to 1 if you have the `regcmp' function. */
|
||||
#undef HAVE_REGCMP
|
||||
|
||||
/* Define to 1 if you have the `regcomp' function. */
|
||||
#undef HAVE_REGCOMP
|
||||
|
||||
/* Define to 1 if you have the `setmode' function. */
|
||||
#undef HAVE_SETMODE
|
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */
|
||||
#undef HAVE_SIGNAL_H
|
||||
|
||||
/* Define if we have sigsetjmp(). */
|
||||
#undef HAVE_SIGSETJMP
|
||||
|
||||
/* Define to 1 if you have a C99 compliant `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define to 1 if you have the <stdarg.h> header file. */
|
||||
#undef HAVE_STDARG_H
|
||||
|
||||
/* Define to 1 if you have the <stddef.h> header file. */
|
||||
#undef HAVE_STDDEF_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the `strchr' function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define to 1 if you have the `strerror' function. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if `decimal_point' is member of `struct lconv'. */
|
||||
#undef HAVE_STRUCT_LCONV_DECIMAL_POINT
|
||||
|
||||
/* Define to 1 if `thousands_sep' is member of `struct lconv'. */
|
||||
#undef HAVE_STRUCT_LCONV_THOUSANDS_SEP
|
||||
|
||||
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_SYS_DIR_H
|
||||
|
||||
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_SYS_NDIR_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/termios.h> header file. */
|
||||
#undef HAVE_SYS_TERMIOS_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/window.h> header file. */
|
||||
#undef HAVE_SYS_WINDOW_H
|
||||
|
||||
/* Define to 1 if the system has the type `uintmax_t'. */
|
||||
#undef HAVE_UINTMAX_T
|
||||
|
||||
/* Define to 1 if the system has the type `uintptr_t'. */
|
||||
#undef HAVE_UINTPTR_T
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if the system has the type `unsigned long long int'. */
|
||||
#undef HAVE_UNSIGNED_LONG_LONG_INT
|
||||
|
||||
/* Define to 1 if you have the <varargs.h> header file. */
|
||||
#undef HAVE_VARARGS_H
|
||||
|
||||
/* Define to 1 if you have the `vasprintf' function. */
|
||||
#undef HAVE_VASPRINTF
|
||||
|
||||
/* Define to 1 if you have the `va_copy' function or macro. */
|
||||
#undef HAVE_VA_COPY
|
||||
|
||||
/* Define to 1 if you have a C99 compliant `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Define to 1 if you have the `_setmode' function. */
|
||||
#undef HAVE__SETMODE
|
||||
|
||||
/* Define to 1 if you have the `__va_copy' function or macro. */
|
||||
#undef HAVE___VA_COPY
|
||||
|
||||
/* We're using some variant of Linux */
|
||||
#undef Linux
|
||||
|
||||
/* Set to reflect version of ncurses: 0 = version 1.* 1 = version 1.9.9g 2 =
|
||||
version 4.0/4.1 */
|
||||
#undef NCURSES_970530
|
||||
|
||||
/* If your Curses does not have color define this one */
|
||||
#undef NO_COLOR_CURSES
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define if you want to turn on SCO-specific code */
|
||||
#undef SCO_FLAVOR
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Use Ncurses? */
|
||||
#undef USE_NCURSES
|
||||
|
||||
/* Use SunOS SysV curses? */
|
||||
#undef USE_SUNOS_CURSES
|
||||
|
||||
/* Use SystemV curses? */
|
||||
#undef USE_SYSV_CURSES
|
||||
|
||||
/* Define this if the scanner is run through lex, not flex */
|
||||
#undef USING_LEX
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
|
||||
`char[]'. */
|
||||
#undef YYTEXT_POINTER
|
||||
|
||||
/* Define to rpl_asprintf if the replacement function should be used. */
|
||||
#undef asprintf
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
|
||||
not define. */
|
||||
#undef intmax_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef mode_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef pid_t
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define to rpl_snprintf if the replacement function should be used. */
|
||||
#undef snprintf
|
||||
|
||||
/* Define to the widest unsigned integer type if <stdint.h> and <inttypes.h>
|
||||
do not define. */
|
||||
#undef uintmax_t
|
||||
|
||||
/* Define to the type of an unsigned integer type wide enough to hold a
|
||||
pointer, if such a type exists, and if the system does not define it. */
|
||||
#undef uintptr_t
|
||||
|
||||
/* Define to rpl_vasprintf if the replacement function should be used. */
|
||||
#undef vasprintf
|
||||
|
||||
/* Define to rpl_vsnprintf if the replacement function should be used. */
|
||||
#undef vsnprintf
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,421 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT
|
||||
AC_CONFIG_SRCDIR([src/crossref.c])
|
||||
AM_INIT_AUTOMAKE(cscope, 15.7a)
|
||||
AC_CONFIG_HEADERS([config.h:config.h.in])
|
||||
AC_PREREQ(2.59)
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
dnl User specification of lexer
|
||||
dnl AC_CHECK_LEXER
|
||||
dnl User specification of yacc
|
||||
dnl AC_CHECK_YACC
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_CC
|
||||
AC_EXEEXT
|
||||
AM_PROG_LEX
|
||||
AM_CONDITIONAL(USING_LEX, test "x$LEX" = "xlex")
|
||||
if test "x$LEX" = "xlex" ; then AC_DEFINE(USING_LEX, 1,
|
||||
[Define this if the scanner is run through lex, not flex])
|
||||
fi
|
||||
AC_PROG_YACC
|
||||
|
||||
dnl === BEGIN CURSES CHECK
|
||||
dnl Curses detection: Munged from Midnight Commander's configure.in
|
||||
dnl
|
||||
dnl What it does:
|
||||
dnl =============
|
||||
dnl
|
||||
dnl - Determine which version of curses is installed on your system
|
||||
dnl and set the -I/-L/-l compiler entries and add a few preprocessor
|
||||
dnl symbols
|
||||
dnl - Do an AC_SUBST on the CURSES_INCLUDEDIR and CURSES_LIBS so that
|
||||
dnl @CURSES_INCLUDEDIR@ and @CURSES_LIBS@ will be available in
|
||||
dnl Makefile.in's
|
||||
dnl - Modify the following configure variables (these are the only
|
||||
dnl curses.m4 variables you can access from within configure.in)
|
||||
dnl CURSES_INCLUDEDIR - contains -I's and possibly -DRENAMED_CURSES if
|
||||
dnl an ncurses.h that's been renamed to curses.h
|
||||
dnl is found.
|
||||
dnl CURSES_LIBS - sets -L and -l's appropriately
|
||||
dnl CFLAGS - if --with-sco, add -D_SVID3
|
||||
dnl has_curses - exports result of tests to rest of configure
|
||||
dnl
|
||||
dnl Usage:
|
||||
dnl ======
|
||||
dnl 1) Add lines indicated below to acconfig.h
|
||||
dnl 2) call AC_CHECK_CURSES after AC_PROG_CC in your configure.in
|
||||
dnl 3) Instead of #include <curses.h> you should use the following to
|
||||
dnl properly locate ncurses or curses header file
|
||||
dnl
|
||||
dnl #if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
|
||||
dnl #include <ncurses.h>
|
||||
dnl #else
|
||||
dnl #include <curses.h>
|
||||
dnl #endif
|
||||
dnl
|
||||
dnl 4) Make sure to add @CURSES_INCLUDEDIR@ to your preprocessor flags
|
||||
dnl 5) Make sure to add @CURSES_LIBS@ to your linker flags or LIBS
|
||||
dnl
|
||||
dnl Notes with automake:
|
||||
dnl - call AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true) from
|
||||
dnl configure.in
|
||||
dnl - your Makefile.am can look something like this
|
||||
dnl -----------------------------------------------
|
||||
dnl INCLUDES= blah blah blah $(CURSES_INCLUDEDIR)
|
||||
dnl if HAS_CURSES
|
||||
dnl CURSES_TARGETS=name_of_curses_prog
|
||||
dnl endif
|
||||
dnl bin_PROGRAMS = other_programs $(CURSES_TARGETS)
|
||||
dnl other_programs_SOURCES = blah blah blah
|
||||
dnl name_of_curses_prog_SOURCES = blah blah blah
|
||||
dnl other_programs_LDADD = blah
|
||||
dnl name_of_curses_prog_LDADD = blah $(CURSES_LIBS)
|
||||
dnl -----------------------------------------------
|
||||
dnl
|
||||
dnl
|
||||
dnl The following lines should be added to acconfig.h:
|
||||
dnl ==================================================
|
||||
dnl
|
||||
dnl /*=== Curses version detection defines ===*/
|
||||
dnl /* Found some version of curses that we're going to use */
|
||||
dnl #undef HAS_CURSES
|
||||
dnl
|
||||
dnl /* Use SunOS SysV curses? */
|
||||
dnl #undef USE_SUNOS_CURSES
|
||||
dnl
|
||||
dnl /* Use old BSD curses - not used right now */
|
||||
dnl #undef USE_BSD_CURSES
|
||||
dnl
|
||||
dnl /* Use SystemV curses? */
|
||||
dnl #undef USE_SYSV_CURSES
|
||||
dnl
|
||||
dnl /* Use Ncurses? */
|
||||
dnl #undef USE_NCURSES
|
||||
dnl
|
||||
dnl /* If you Curses does not have color define this one */
|
||||
dnl #undef NO_COLOR_CURSES
|
||||
dnl
|
||||
dnl /* Define if you want to turn on SCO-specific code */
|
||||
dnl #undef SCO_FLAVOR
|
||||
dnl
|
||||
dnl /* Set to reflect version of ncurses *
|
||||
dnl * 0 = version 1.*
|
||||
dnl * 1 = version 1.9.9g
|
||||
dnl * 2 = version 4.0/4.1 */
|
||||
dnl #undef NCURSES_970530
|
||||
dnl
|
||||
dnl /*=== End new stuff for acconfig.h ===*/
|
||||
dnl
|
||||
|
||||
|
||||
AC_DEFUN([AC_CHECK_CURSES],[
|
||||
search_ncurses=true
|
||||
screen_manager=""
|
||||
has_curses=false
|
||||
|
||||
CFLAGS=${CFLAGS--O}
|
||||
|
||||
AC_SUBST(CURSES_LIBS)
|
||||
AC_SUBST(CURSES_INCLUDEDIR)
|
||||
|
||||
AC_ARG_WITH(sco,
|
||||
[ --with-sco Use this to turn on SCO-specific code],[
|
||||
if test x$withval = xyes; then
|
||||
AC_DEFINE(SCO_FLAVOR, 1, [Define if you want to turn on SCO-specific code])
|
||||
CFLAGS="$CFLAGS -D_SVID3"
|
||||
fi
|
||||
])
|
||||
|
||||
AC_ARG_WITH(sunos-curses,
|
||||
[ --with-sunos-curses Used to force SunOS 4.x curses],[
|
||||
if test x$withval = xyes; then
|
||||
AC_USE_SUNOS_CURSES
|
||||
fi
|
||||
])
|
||||
|
||||
AC_ARG_WITH(osf1-curses,
|
||||
[ --with-osf1-curses Used to force OSF/1 curses],[
|
||||
if test x$withval = xyes; then
|
||||
AC_USE_OSF1_CURSES
|
||||
fi
|
||||
])
|
||||
|
||||
AC_ARG_WITH(vcurses,
|
||||
[ --with-vcurses[=incdir] Used to force SysV curses],
|
||||
if test x$withval != xyes; then
|
||||
CURSES_INCLUDEDIR="-I$withval"
|
||||
fi
|
||||
AC_USE_SYSV_CURSES
|
||||
)
|
||||
|
||||
AC_ARG_WITH(ncurses,
|
||||
[ --with-ncurses[=dir] Compile with ncurses/locate base dir],
|
||||
if test x$withval = xno ; then
|
||||
search_ncurses=false
|
||||
elif test x$withval != xyes ; then
|
||||
CURSES_LIBS="$LIBS -L$withval/lib -lncurses"
|
||||
CURSES_INCLUDEDIR="-I$withval/include"
|
||||
search_ncurses=false
|
||||
screen_manager="ncurses"
|
||||
AC_DEFINE(USE_NCURSES, 1, [Use Ncurses?])
|
||||
AC_DEFINE(HAS_CURSES, 1, [Found some version of curses that we're going to use])
|
||||
has_curses=true
|
||||
fi
|
||||
)
|
||||
|
||||
if $search_ncurses
|
||||
then
|
||||
AC_SEARCH_NCURSES()
|
||||
fi
|
||||
|
||||
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN([AC_USE_SUNOS_CURSES], [
|
||||
search_ncurses=false
|
||||
screen_manager="SunOS 4.x /usr/5include curses"
|
||||
AC_MSG_RESULT(Using SunOS 4.x /usr/5include curses)
|
||||
AC_DEFINE(USE_SUNOS_CURSES, 1, [Use SunOS SysV curses?])
|
||||
AC_DEFINE(HAS_CURSES)
|
||||
has_curses=true
|
||||
AC_DEFINE(NO_COLOR_CURSES, 1, [If your Curses does not have color define this one])
|
||||
AC_DEFINE(USE_SYSV_CURSES, 1, [Use SystemV curses?])
|
||||
CURSES_INCLUDEDIR="-I/usr/5include"
|
||||
CURSES_LIBS="/usr/5lib/libcurses.a /usr/5lib/libtermcap.a"
|
||||
AC_MSG_RESULT(Please note that some screen refreshs may fail)
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_USE_OSF1_CURSES], [
|
||||
AC_MSG_RESULT(Using OSF1 curses)
|
||||
search_ncurses=false
|
||||
screen_manager="OSF1 curses"
|
||||
AC_DEFINE(HAS_CURSES)
|
||||
has_curses=true
|
||||
AC_DEFINE(NO_COLOR_CURSES)
|
||||
AC_DEFINE(USE_SYSV_CURSES)
|
||||
CURSES_LIBS="-lcurses"
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_USE_SYSV_CURSES], [
|
||||
AC_MSG_RESULT(Using SysV curses)
|
||||
AC_DEFINE(HAS_CURSES)
|
||||
has_curses=true
|
||||
AC_DEFINE(USE_SYSV_CURSES)
|
||||
search_ncurses=false
|
||||
screen_manager="SysV/curses"
|
||||
CURSES_LIBS="-lcurses"
|
||||
])
|
||||
|
||||
dnl AC_ARG_WITH(bsd-curses,
|
||||
dnl [--with-bsd-curses Used to compile with bsd curses, not very fancy],
|
||||
dnl search_ncurses=false
|
||||
dnl screen_manager="Ultrix/cursesX"
|
||||
dnl if test $system = ULTRIX
|
||||
dnl then
|
||||
dnl THIS_CURSES=cursesX
|
||||
dnl else
|
||||
dnl THIS_CURSES=curses
|
||||
dnl fi
|
||||
dnl
|
||||
dnl CURSES_LIBS="-l$THIS_CURSES -ltermcap"
|
||||
dnl AC_DEFINE(HAS_CURSES)
|
||||
dnl has_curses=true
|
||||
dnl AC_DEFINE(USE_BSD_CURSES)
|
||||
dnl AC_MSG_RESULT(Please note that some screen refreshs may fail)
|
||||
dnl AC_MSG_WARN([Use of the bsdcurses extension has some])
|
||||
dnl AC_MSG_WARN([display/input problems.])
|
||||
dnl AC_MSG_WARN([Reconsider using xcurses])
|
||||
dnl)
|
||||
|
||||
|
||||
dnl
|
||||
dnl Parameters: directory filename cureses_LIBS curses_INCLUDEDIR nicename
|
||||
dnl
|
||||
AC_DEFUN([AC_NCURSES], [
|
||||
if $search_ncurses
|
||||
then
|
||||
if test -f $1/$2
|
||||
then
|
||||
AC_MSG_RESULT(Found ncurses on $1/$2)
|
||||
CURSES_LIBS="$3"
|
||||
CURSES_INCLUDEDIR="$4"
|
||||
search_ncurses=false
|
||||
screen_manager=$5
|
||||
AC_DEFINE(HAS_CURSES)
|
||||
has_curses=true
|
||||
AC_DEFINE(USE_NCURSES)
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_SEARCH_NCURSES], [
|
||||
AS_MESSAGE(checking "location of ncurses.h file"...)
|
||||
|
||||
AC_NCURSES(/usr/include, ncurses.h, -lncurses,, "ncurses on /usr/include")
|
||||
AC_NCURSES(/usr/include/ncurses, ncurses.h, -lncurses, -I/usr/include/ncurses, "ncurses on /usr/include/ncurses")
|
||||
AC_NCURSES(/usr/local/include, ncurses.h, -L/usr/local/lib -lncurses, -I/usr/local/include, "ncurses on /usr/local")
|
||||
AC_NCURSES(/usr/local/include/ncurses, ncurses.h, -L/usr/local/lib -L/usr/local/lib/ncurses -lncurses, -I/usr/local/include/ncurses, "ncurses on /usr/local/include/ncurses")
|
||||
|
||||
AC_NCURSES(/usr/local/include/ncurses, curses.h, -L/usr/local/lib -lncurses, -I/usr/local/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/local/.../ncurses")
|
||||
|
||||
AC_NCURSES(/usr/include/ncurses, curses.h, -lncurses, -I/usr/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/include/ncurses")
|
||||
|
||||
dnl
|
||||
dnl We couldn't find ncurses, try SysV curses
|
||||
dnl
|
||||
if $search_ncurses
|
||||
then
|
||||
AC_EGREP_HEADER(init_color, curses.h,
|
||||
AC_USE_SYSV_CURSES)
|
||||
AC_EGREP_CPP(USE_NCURSES,[
|
||||
#include <curses.h>
|
||||
#ifdef __NCURSES_H
|
||||
#undef USE_NCURSES
|
||||
USE_NCURSES
|
||||
#endif
|
||||
],[
|
||||
CURSES_INCLUDEDIR="$CURSES_INCLUDEDIR -DRENAMED_NCURSES"
|
||||
AC_DEFINE(HAS_CURSES)
|
||||
has_curses=true
|
||||
AC_DEFINE(USE_NCURSES)
|
||||
search_ncurses=false
|
||||
screen_manager="ncurses installed as curses"
|
||||
])
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl Try SunOS 4.x /usr/5{lib,include} ncurses
|
||||
dnl The flags USE_SUNOS_CURSES, USE_BSD_CURSES and BUGGY_CURSES
|
||||
dnl should be replaced by a more fine grained selection routine
|
||||
dnl
|
||||
if $search_ncurses
|
||||
then
|
||||
if test -f /usr/5include/curses.h
|
||||
then
|
||||
AC_USE_SUNOS_CURSES
|
||||
fi
|
||||
else
|
||||
# check for ncurses version, to properly ifdef mouse-fix
|
||||
AC_MSG_CHECKING(for ncurses version)
|
||||
ncurses_version=unknown
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
[#]line __oline__ "configure"
|
||||
#include "confdefs.h"
|
||||
#ifdef RENAMED_NCURSES
|
||||
#include <curses.h>
|
||||
#else
|
||||
#include <ncurses.h>
|
||||
#endif
|
||||
#undef VERSION
|
||||
VERSION:NCURSES_VERSION
|
||||
EOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD() |
|
||||
egrep "VERSION:" >conftest.out 2>&1; then
|
||||
changequote(,)dnl
|
||||
ncurses_version=`cat conftest.out|sed -e 's/^[^"]*"//' -e 's/".*//'`
|
||||
changequote([,])dnl
|
||||
fi
|
||||
rm -rf conftest*
|
||||
AC_MSG_RESULT($ncurses_version)
|
||||
case "$ncurses_version" in
|
||||
changequote(,)dnl
|
||||
4.[01])
|
||||
changequote([,])dnl
|
||||
AC_DEFINE(NCURSES_970530,2,
|
||||
[Set to reflect version of ncurses:
|
||||
0 = version 1.*
|
||||
1 = version 1.9.9g
|
||||
2 = version 4.0/4.1])
|
||||
;;
|
||||
1.9.9g)
|
||||
AC_DEFINE(NCURSES_970530,1)
|
||||
;;
|
||||
1*)
|
||||
AC_DEFINE(NCURSES_970530,0)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
dnl === END CURSES CHECK
|
||||
|
||||
AC_CHECK_CURSES
|
||||
AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true)
|
||||
|
||||
dnl Checks for libraries.
|
||||
dnl Replace `main' with a function in -lcurses:
|
||||
dnl AC_CHECK_LIB(curses, main)
|
||||
|
||||
AC_CHECK_HEADER(regex.h, [], [
|
||||
AC_MSG_ERROR([necessary header <regex.h> not found])
|
||||
])
|
||||
|
||||
dnl Cygwin is a bit peculiar: it has the regcomp() functions, but in a
|
||||
dnl separate library, so we have to check for that:
|
||||
AC_CHECK_LIB(regex, regcomp)
|
||||
|
||||
dnl Check for a GNOME installation
|
||||
|
||||
AC_DEFUN([AC_CHECK_GNOME],[
|
||||
has_gnome=false
|
||||
AC_CHECK_PROG(gnome1, gnome-config, true)
|
||||
AC_CHECK_PROG(gnome2, pkg-config, true)
|
||||
|
||||
if test x$gnome1 = xtrue; then
|
||||
has_gnome=true
|
||||
fi
|
||||
|
||||
if test x$gnome2 = xtrue; then
|
||||
has_gnome=true
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(USING_GNOME2, pkg-config --exists gtk+-2.0)
|
||||
AM_CONDITIONAL(HAS_GNOME, test "$has_gnome" = true)
|
||||
AM_CONDITIONAL(GNOME_LINUX, test "$host_os" = Linux)
|
||||
])
|
||||
|
||||
AC_CHECK_GNOME
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(fcntl.h sys/window.h sys/termios.h unistd.h signal.h floss.h io.h)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_CHECK_TYPE(sighandler_t,[],[],[
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
# include <signal.h>
|
||||
#endif])
|
||||
dnl This test was ripped from gnuplot's configure.in:
|
||||
AC_MSG_CHECKING(for sigsetjmp)
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]], [[jmp_buf env; sigsetjmp(env, 1);]])],[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_SIGSETJMP,1,
|
||||
[ Define if we have sigsetjmp(). ])],[AC_MSG_RESULT(no)])
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_TYPE_SIGNAL
|
||||
AC_CHECK_FUNCS(strchr memcpy memset setmode _setmode)
|
||||
AC_CHECK_FUNCS(getcwd regcmp regcomp strerror lstat)
|
||||
AC_CHECK_FUNCS(fixkeypad)
|
||||
HW_FUNC_SNPRINTF
|
||||
HW_FUNC_VSNPRINTF
|
||||
HW_FUNC_ASPRINTF
|
||||
HW_FUNC_VASPRINTF
|
||||
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
AC_DEFINE(Linux, 1, [We're using some variant of Linux])
|
||||
;;
|
||||
netbsd*|freebsd*|darwin*)
|
||||
AC_DEFINE(BSD, 1, [We're using a BSD-flavoured Unix])
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile contrib/Makefile])
|
||||
AC_OUTPUT
|
|
@ -0,0 +1,6 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
bin_SCRIPTS = ocs
|
||||
|
||||
EXTRA_DIST = ocs README xcscope webcscope
|
||||
|
|
@ -0,0 +1,338 @@
|
|||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
LIBOBJDIR =
|
||||
subdir = contrib
|
||||
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
|
||||
SCRIPTS = $(bin_SCRIPTS)
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@
|
||||
CURSES_LIBS = @CURSES_LIBS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GNOME_LINUX_FALSE = @GNOME_LINUX_FALSE@
|
||||
GNOME_LINUX_TRUE = @GNOME_LINUX_TRUE@
|
||||
GREP = @GREP@
|
||||
HAS_CURSES_FALSE = @HAS_CURSES_FALSE@
|
||||
HAS_CURSES_TRUE = @HAS_CURSES_TRUE@
|
||||
HAS_GNOME_FALSE = @HAS_GNOME_FALSE@
|
||||
HAS_GNOME_TRUE = @HAS_GNOME_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
USING_GNOME2_FALSE = @USING_GNOME2_FALSE@
|
||||
USING_GNOME2_TRUE = @USING_GNOME2_TRUE@
|
||||
USING_LEX_FALSE = @USING_LEX_FALSE@
|
||||
USING_LEX_TRUE = @USING_LEX_TRUE@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
gnome1 = @gnome1@
|
||||
gnome2 = @gnome2@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
bin_SCRIPTS = ocs
|
||||
EXTRA_DIST = ocs README xcscope webcscope
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu contrib/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
|
||||
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
if test -f $$d$$p; then \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-binSCRIPTS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(bindir)/$$f"; \
|
||||
done
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(SCRIPTS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(bindir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-binSCRIPTS
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binSCRIPTS uninstall-info-am
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-binSCRIPTS install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am uninstall uninstall-am uninstall-binSCRIPTS \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -0,0 +1,11 @@
|
|||
Contributed addons and wrappers for cscope
|
||||
$Id: README,v 1.3 2001/07/02 20:57:45 petr Exp $
|
||||
|
||||
ocs - wrapper for cscope providing database generation through recursive
|
||||
directory set (among other things) - docced in script itself.
|
||||
contributed from SCO osr5.
|
||||
|
||||
webcscope - a web cgi interface to cscope. Contributed by Ragho Mahalingam,
|
||||
using code from Dmitry Obukhovi and Steven E. Brenner.
|
||||
|
||||
xcscope - An (X)Emacs interface to cscope.
|
|
@ -0,0 +1,308 @@
|
|||
#!/bin/sh
|
||||
# $Id: ocs,v 1.4 2004/06/21 18:13:21 broeker Exp $
|
||||
# This utility maintains the database for cscope on a recursive dir set
|
||||
# Author: donwo Tue Jun 25 15:36:39 PDT 1996
|
||||
# Modified: hops Jan 2000 chg defaults to not update if files exist and force
|
||||
#
|
||||
# These comments ARE the manual. What more do you really need?
|
||||
# if using unadorned cscope with this use cscope -d so not trash db
|
||||
# cscope -L -0 <ptn> - to display ptn matches on stdout
|
||||
#
|
||||
# The lists of files are kept in two forms:
|
||||
# TMP cscope.tmplst
|
||||
# The list generated by this program
|
||||
# This list will be updated each time this program
|
||||
# is executed.
|
||||
#
|
||||
# LST cscope.lst
|
||||
# The fixed list generated by some other process
|
||||
# This list will be used, if found, rather than
|
||||
# the TMP form generated here.
|
||||
#
|
||||
# CSD cscope.csd
|
||||
# The fixed list generated by some other process
|
||||
# This list will be used, if found, rather than
|
||||
# the LST or TMP forms. CSD differs from LST in
|
||||
# that the CSD list is used where the source files
|
||||
# change only seldom. Cscope is requested not to
|
||||
# check for changed files. This can be
|
||||
# significantly faster on large source trees.
|
||||
#
|
||||
# INC cscope.inc
|
||||
# This is a list of additional directories
|
||||
# in which to search for include files.
|
||||
#
|
||||
# Three hierarchies of libraries are supported:
|
||||
# Local In the current directory ./
|
||||
# This is most useful for transient projects or
|
||||
# where the information is of no use to others on
|
||||
# the system. This type is NOT usable on source
|
||||
# directories that are read-only.
|
||||
# Home In users home directory $HOME/lib/cs/`pwd`
|
||||
# This is good for items that seldom change but are
|
||||
# of use only the the current user. This type is
|
||||
# usable on source directories that are read-only.
|
||||
# System In a global system directory $SYSDIR/`pwd`
|
||||
# This is for items that are of interest to all accounts.
|
||||
# This option is not available unless the system directory
|
||||
# is writable by the current user. This type is usable
|
||||
# on source directories that are read-only.
|
||||
#
|
||||
# If a shell script named ./cscope.rc is found and is
|
||||
# executable, the execution of it will be included within this
|
||||
# script after defaults_set/cmdline_parse and locating the
|
||||
# database.
|
||||
#
|
||||
# Command line options:
|
||||
# -x set shell debugging
|
||||
# -f force
|
||||
# o Do not ask about regenerating TMP. Just do it.
|
||||
# o Allow cscope to regenerate libraries for CSD lists.
|
||||
# -q Tell cscope to build an inverted index for quick
|
||||
# symbol searching. There is a SIGNIFICANT
|
||||
# increase in speed with this option however the
|
||||
# disk space used is doubled. Once the quick
|
||||
# database is generated, cs will detect the files
|
||||
# and continue to use them.
|
||||
# -d Do not regenerate. Intended for cscope sub-tasks.
|
||||
# -u Update/regenerate.
|
||||
|
||||
#
|
||||
# Here is where we put things
|
||||
|
||||
CSCOPE=cscope
|
||||
HOMEDIR=${HOME}/lib/cs
|
||||
|
||||
#set the default value for SYSDIR
|
||||
if [ -z "${SYSDIR}" ]; then
|
||||
SYSDIR=/usr/local/lib/cs
|
||||
echo setting default sysdir
|
||||
fi
|
||||
|
||||
#check that SYSDIR exists
|
||||
if [ ! -d ${SYSDIR} ]; then
|
||||
echo -n $SYSDIR does not exist.
|
||||
echo Please create the directory and set SYSDIR appropriately
|
||||
exit
|
||||
fi
|
||||
|
||||
# Check that cscope is in PATH
|
||||
type cscope 1>/dev/null 2>&1
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "ERROR: cscope is not in \$PATH" >&2
|
||||
echo " Please set \$PATH correctly or make sure cscope is installed" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# popup editor
|
||||
#XCS_EDITOR=${HOME}/bin/x_cscope_editor
|
||||
XCS_EDITOR=${HOME}/bin/xme
|
||||
if [ -n "$DISPLAY" -a -x ${XCS_EDITOR} ]
|
||||
then
|
||||
EDITOR=${XCS_EDITOR}
|
||||
export EDITOR
|
||||
fi
|
||||
unset XCS_EDITOR
|
||||
|
||||
#
|
||||
# Misc defaults
|
||||
|
||||
#FORCE=N
|
||||
#NOUPDATE=
|
||||
FORCE=Y # hops - default to force rather than query
|
||||
NOUPDATE=-d # hops - default to no update if files already exist
|
||||
QUICK=
|
||||
SPECDEST= # hops - query for files
|
||||
|
||||
#
|
||||
# Parse the command line
|
||||
|
||||
set -- `getopt xfqdu $*`
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Use: cs [-x] [-f] [-q] [-u]" >&2
|
||||
echo " -x debug on " >&2
|
||||
echo " -q quick Index - faster search but larger index" >&2
|
||||
echo " -f ask about about regeneration" >&2
|
||||
echo " -d don't update database (default)" >&2
|
||||
echo " -u update database" >&2
|
||||
echo " -s specify where files go" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-x ) set -x; shift ;;
|
||||
-f ) FORCE=N; NOUPDATE=; shift;;
|
||||
-q ) QUICK=-q; shift ;;
|
||||
-d ) NOUPDATE=-d; shift ;;
|
||||
-u ) NOUPDATE=; shift ;;
|
||||
-s ) SPECDEST=Y; shift ;;
|
||||
esac
|
||||
done
|
||||
|
||||
#
|
||||
# Here is the security hole. Execute whatever is needed for
|
||||
# this project. A per-project setup script may be available.
|
||||
|
||||
[ -x ./cscope.rc ] && {
|
||||
. ./cscope.rc
|
||||
}
|
||||
|
||||
#
|
||||
# We look hard for appropriate files to scope. We ignore items
|
||||
# containing "SCCS" assuming that these are directories of
|
||||
# source code control data.
|
||||
|
||||
create_list()
|
||||
{
|
||||
LIST=$1
|
||||
|
||||
if [ -f ${LIST} ]
|
||||
then
|
||||
[ -n "${NOUPDATE}" ] && return
|
||||
|
||||
if [ "${FORCE}" != "Y" ]
|
||||
then
|
||||
echo "\n${LIST}"
|
||||
echo "Update the library? <(Y)es, (N)o, (Q)uit> [n] \c"
|
||||
read x y
|
||||
case $x in
|
||||
[Yy]* ) ;;
|
||||
[Qq]* ) exit 1 ;;
|
||||
*) return ;;
|
||||
esac
|
||||
fi
|
||||
echo "Updating library:\n ${LIST} \c"
|
||||
else
|
||||
echo "Creating library:\n ${LIST} \c"
|
||||
fi
|
||||
|
||||
(
|
||||
find . -follow -type f \( -name \*.[sScChHlyG] -o \
|
||||
-name \*.asm -o \
|
||||
-name \*.cc -o \
|
||||
-name \*.cxx -o \
|
||||
-name \*.ccP -o \
|
||||
-name \*.hP -o \
|
||||
-name \*.inc -o \
|
||||
-name \*.ed -o \
|
||||
-name vuifile -o \
|
||||
-name Gensymvals -o \
|
||||
-name \[mM\]ake\* \) \
|
||||
-print
|
||||
) | grep -v SCCS | sort -u > ${LIST}
|
||||
|
||||
echo "\n`cat ${LIST} | wc -l` files listed"
|
||||
}
|
||||
|
||||
#
|
||||
# Expand the include file list into command line arguments
|
||||
|
||||
exp_inc()
|
||||
{
|
||||
theInc=$1
|
||||
|
||||
if [ -s "${theInc}" ]
|
||||
then
|
||||
for i in `cat ${theInc}`
|
||||
do
|
||||
echo "-I $i \c"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# This routine does not return to the caller
|
||||
|
||||
do_cscope()
|
||||
{
|
||||
LIST=$1
|
||||
CSLIB=$2
|
||||
INC=$3
|
||||
shift;shift;shift
|
||||
ARGS="$*"
|
||||
|
||||
INCARGS=`exp_inc ${INC}`
|
||||
|
||||
echo "exec cscope"
|
||||
exec $CSCOPE ${ARGS} -p 2 ${INCARGS} -i ${LIST} -f ${CSLIB}
|
||||
echo "exec of $CSCOPE failed" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
#
|
||||
# If we have existing libraries, we should use them.
|
||||
std_libs()
|
||||
{
|
||||
DIR=$1
|
||||
OUT=${DIR}/cscope.out
|
||||
LST=${DIR}/cscope.lst
|
||||
CSD=${DIR}/cscope.csd
|
||||
TMP=${DIR}/cscope.tmplst
|
||||
INC=${DIR}/cscope.inc
|
||||
QCK=${DIR}/cscope.out.po
|
||||
|
||||
[ -s ${QCK} ] && QUICK=-q
|
||||
|
||||
[ -f ${CSD} ] && {
|
||||
if [ "${FORCE}" = "Y" ]
|
||||
then
|
||||
do_cscope ${CSD} ${OUT} ${INC} ${QUICK}
|
||||
else
|
||||
do_cscope ${CSD} ${OUT} ${INC} ${QUICK} -d
|
||||
fi
|
||||
}
|
||||
|
||||
[ -f ${LST} ] && do_cscope ${LST} ${OUT} ${INC} ${QUICK} ${NOUPDATE}
|
||||
|
||||
[ -f ${TMP} ] && {
|
||||
create_list ${TMP}
|
||||
do_cscope ${TMP} ${OUT} ${INC} ${QUICK} ${NOUPDATE}
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# ######## main() #######
|
||||
|
||||
umask 0
|
||||
PWD=`pwd`
|
||||
|
||||
umask 02
|
||||
|
||||
#
|
||||
# Check for existing libraries
|
||||
|
||||
std_libs $PWD
|
||||
std_libs ${HOMEDIR}$PWD
|
||||
std_libs ${SYSDIR}$PWD
|
||||
|
||||
#
|
||||
# We may need to create one for this area
|
||||
|
||||
DIR=$PWD
|
||||
if [ ! -n "${NOUPDATE}" -o -n "${SPECDEST}" ] ; then
|
||||
echo "Create new library? <(L)ocal, (H)ome, (S)ystem, (Q)uit> [q] \c"
|
||||
read x y
|
||||
case $x in
|
||||
[Ll]* ) DIR=$PWD ;;
|
||||
[Hh]* ) DIR=${HOMEDIR}$PWD ;;
|
||||
[Ss]* ) DIR=${SYSDIR}$PWD ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
[ -d $DIR ] || {
|
||||
mkdir -p $DIR || exit $?
|
||||
}
|
||||
|
||||
OUT=${DIR}/cscope.out
|
||||
TMP=${DIR}/cscope.tmplst
|
||||
INC=${DIR}/cscope.inc
|
||||
|
||||
create_list ${TMP}
|
||||
do_cscope ${TMP} ${OUT} ${INC} ${QUICK}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
/INSTALL/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/LICENSE/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/TODO/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/cgi-lib.pl/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/hilite.c/1.1/Fri Jun 29 14:20:16 2001//
|
||||
D/icons////
|
||||
/cscope/1.2/Sun Jan 7 12:34:02 2007//
|
|
@ -0,0 +1,7 @@
|
|||
/INSTALL////
|
||||
/LICENSE////
|
||||
/TODO////
|
||||
/cgi-lib.pl////
|
||||
/hilite.c////
|
||||
D/icons////
|
||||
/cscope////
|
|
@ -0,0 +1,7 @@
|
|||
/INSTALL////
|
||||
/LICENSE////
|
||||
/TODO////
|
||||
/cgi-lib.pl////
|
||||
/cscope////
|
||||
/hilite.c////
|
||||
D/icons////
|
|
@ -0,0 +1,7 @@
|
|||
/INSTALL/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/LICENSE/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/TODO/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/cgi-lib.pl/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/cscope/1.1/Fri Jun 29 14:20:16 2001//
|
||||
/hilite.c/1.1/Fri Jun 29 14:20:16 2001//
|
||||
D/icons////
|
|
@ -0,0 +1 @@
|
|||
cscope/contrib/webcscope
|
|
@ -0,0 +1 @@
|
|||
:ssh;username=broeker;hostname=cscope.cvs.sourceforge.net:/cvsroot/cscope
|
|
@ -0,0 +1,31 @@
|
|||
WebCScope Installation
|
||||
|
||||
Quick Install
|
||||
|
||||
0. Create a directory called cscope under your /cgi-bin (virtual) directory.
|
||||
Copy all the files in the distribution to this directory.
|
||||
|
||||
1. Edit the 'cscope' file and change the following items:
|
||||
- Location to the perl interpreter
|
||||
- Location of the cscope database and other modifiable parameters
|
||||
- Feedback name and email
|
||||
- Location of the syntax highlighter, if you wish to use it
|
||||
|
||||
2. Syntax highlighter
|
||||
- The syntax highlighter must be built if you decide to use it. If you
|
||||
do not want syntax highlighting, you can ignore this step and set the
|
||||
highlighter to /bin/cat.
|
||||
- Compile 'hilite.c' using 'gcc -o hilite hilite.c'
|
||||
|
||||
3. Icons
|
||||
- Copy the images from the icons directory into the /icons (virtual)
|
||||
directory on the web server. You can also replace these images with
|
||||
whatever you choose.
|
||||
|
||||
4. Organizing your CScope databases
|
||||
- WebCScope supports multiple databases in $cscopedir
|
||||
- Create a directory for each project or sub-source in $cscopedir and,
|
||||
generate your cscope database using the following commands.
|
||||
- find /some/source/dir -name '*.[chyls]' -print > cscope.files
|
||||
- cscope -b -q
|
||||
- Repeat the above step for each database you wish to create
|
|
@ -0,0 +1,340 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
- Better error checking and the like
|
||||
- Add a more robust cookie mechanism
|
||||
- More efficient way of searching 'all' databases
|
||||
- Fix bugs
|
|
@ -0,0 +1,471 @@
|
|||
# Perl Routines to Manipulate CGI input
|
||||
# cgi-lib@pobox.com
|
||||
# $Id: cgi-lib.pl,v 1.1 2001/06/29 14:20:16 petr Exp $
|
||||
#
|
||||
# Copyright (c) 1993-1999 Steven E. Brenner
|
||||
# Unpublished work.
|
||||
# Permission granted to use and modify this library so long as the
|
||||
# copyright above is maintained, modifications are documented, and
|
||||
# credit is given for any use of the library.
|
||||
#
|
||||
# Thanks are due to many people for reporting bugs and suggestions
|
||||
|
||||
# For more information, see:
|
||||
# http://cgi-lib.stanford.edu/cgi-lib/
|
||||
|
||||
$cgi_lib'version = sprintf("%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/);
|
||||
|
||||
|
||||
# Parameters affecting cgi-lib behavior
|
||||
# User-configurable parameters affecting file upload.
|
||||
$cgi_lib'maxdata = 131072; # maximum bytes to accept via POST - 2^17
|
||||
$cgi_lib'writefiles = 0; # directory to which to write files, or
|
||||
# 0 if files should not be written
|
||||
$cgi_lib'filepre = "cgi-lib"; # Prefix of file names, in directory above
|
||||
|
||||
# Do not change the following parameters unless you have special reasons
|
||||
$cgi_lib'bufsize = 8192; # default buffer size when reading multipart
|
||||
$cgi_lib'maxbound = 100; # maximum boundary length to be encounterd
|
||||
$cgi_lib'headerout = 0; # indicates whether the header has been printed
|
||||
|
||||
|
||||
# ReadParse
|
||||
# Reads in GET or POST data, converts it to unescaped text, and puts
|
||||
# key/value pairs in %in, using "\0" to separate multiple selections
|
||||
|
||||
# Returns >0 if there was input, 0 if there was no input
|
||||
# undef indicates some failure.
|
||||
|
||||
# Now that cgi scripts can be put in the normal file space, it is useful
|
||||
# to combine both the form and the script in one place. If no parameters
|
||||
# are given (i.e., ReadParse returns FALSE), then a form could be output.
|
||||
|
||||
# If a reference to a hash is given, then the data will be stored in that
|
||||
# hash, but the data from $in and @in will become inaccessable.
|
||||
# If a variable-glob (e.g., *cgi_input) is the first parameter to ReadParse,
|
||||
# information is stored there, rather than in $in, @in, and %in.
|
||||
# Second, third, and fourth parameters fill associative arrays analagous to
|
||||
# %in with data relevant to file uploads.
|
||||
|
||||
# If no method is given, the script will process both command-line arguments
|
||||
# of the form: name=value and any text that is in $ENV{'QUERY_STRING'}
|
||||
# This is intended to aid debugging and may be changed in future releases
|
||||
|
||||
sub ReadParse {
|
||||
# Disable warnings as this code deliberately uses local and environment
|
||||
# variables which are preset to undef (i.e., not explicitly initialized)
|
||||
local ($perlwarn);
|
||||
$perlwarn = $^W;
|
||||
$^W = 0;
|
||||
|
||||
local (*in) = shift if @_; # CGI input
|
||||
local (*incfn, # Client's filename (may not be provided)
|
||||
*inct, # Client's content-type (may not be provided)
|
||||
*insfn) = @_; # Server's filename (for spooled files)
|
||||
local ($len, $type, $meth, $errflag, $cmdflag, $got, $name);
|
||||
|
||||
binmode(STDIN); # we need these for DOS-based systems
|
||||
binmode(STDOUT); # and they shouldn't hurt anything else
|
||||
binmode(STDERR);
|
||||
|
||||
# Get several useful env variables
|
||||
$type = $ENV{'CONTENT_TYPE'};
|
||||
$len = $ENV{'CONTENT_LENGTH'};
|
||||
$meth = $ENV{'REQUEST_METHOD'};
|
||||
|
||||
if ($len > $cgi_lib'maxdata) { #'
|
||||
&CgiDie("cgi-lib.pl: Request to receive too much data: $len bytes\n");
|
||||
}
|
||||
|
||||
if (!defined $meth || $meth eq '' || $meth eq 'GET' ||
|
||||
$meth eq 'HEAD' ||
|
||||
$type eq 'application/x-www-form-urlencoded') {
|
||||
local ($key, $val, $i);
|
||||
|
||||
# Read in text
|
||||
if (!defined $meth || $meth eq '') {
|
||||
$in = $ENV{'QUERY_STRING'};
|
||||
$cmdflag = 1; # also use command-line options
|
||||
} elsif($meth eq 'GET' || $meth eq 'HEAD') {
|
||||
$in = $ENV{'QUERY_STRING'};
|
||||
} elsif ($meth eq 'POST') {
|
||||
if (($got = read(STDIN, $in, $len) != $len))
|
||||
{$errflag="Short Read: wanted $len, got $got\n";};
|
||||
} else {
|
||||
&CgiDie("cgi-lib.pl: Unknown request method: $meth\n");
|
||||
}
|
||||
|
||||
@in = split(/[&;]/,$in);
|
||||
push(@in, @ARGV) if $cmdflag; # add command-line parameters
|
||||
|
||||
foreach $i (0 .. $#in) {
|
||||
# Convert plus to space
|
||||
$in[$i] =~ s/\+/ /g;
|
||||
|
||||
# Split into key and value.
|
||||
($key, $val) = split(/=/,$in[$i],2); # splits on the first =.
|
||||
|
||||
# Convert %XX from hex numbers to alphanumeric
|
||||
$key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
|
||||
$val =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
|
||||
|
||||
# Associate key and value
|
||||
$in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator
|
||||
$in{$key} .= $val;
|
||||
}
|
||||
|
||||
} elsif ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) {
|
||||
# for efficiency, compile multipart code only if needed
|
||||
$errflag = !(eval <<'END_MULTIPART');
|
||||
|
||||
local ($buf, $boundary, $head, @heads, $cd, $ct, $fname, $ctype, $blen);
|
||||
local ($bpos, $lpos, $left, $amt, $fn, $ser);
|
||||
local ($bufsize, $maxbound, $writefiles) =
|
||||
($cgi_lib'bufsize, $cgi_lib'maxbound, $cgi_lib'writefiles);
|
||||
|
||||
|
||||
# The following lines exist solely to eliminate spurious warning messages
|
||||
$buf = '';
|
||||
|
||||
($boundary) = $type =~ /boundary="([^"]+)"/; #"; # find boundary
|
||||
($boundary) = $type =~ /boundary=(\S+)/ unless $boundary;
|
||||
&CgiDie ("Boundary not provided: probably a bug in your server")
|
||||
unless $boundary;
|
||||
$boundary = "--" . $boundary;
|
||||
$blen = length ($boundary);
|
||||
|
||||
if ($ENV{'REQUEST_METHOD'} ne 'POST') {
|
||||
&CgiDie("Invalid request method for multipart/form-data: $meth\n");
|
||||
}
|
||||
|
||||
if ($writefiles) {
|
||||
local($me);
|
||||
stat ($writefiles);
|
||||
$writefiles = "/tmp" unless -d _ && -w _;
|
||||
# ($me) = $0 =~ m#([^/]*)$#;
|
||||
$writefiles .= "/$cgi_lib'filepre";
|
||||
}
|
||||
|
||||
# read in the data and split into parts:
|
||||
# put headers in @in and data in %in
|
||||
# General algorithm:
|
||||
# There are two dividers: the border and the '\r\n\r\n' between
|
||||
# header and body. Iterate between searching for these
|
||||
# Retain a buffer of size(bufsize+maxbound); the latter part is
|
||||
# to ensure that dividers don't get lost by wrapping between two bufs
|
||||
# Look for a divider in the current batch. If not found, then
|
||||
# save all of bufsize, move the maxbound extra buffer to the front of
|
||||
# the buffer, and read in a new bufsize bytes. If a divider is found,
|
||||
# save everything up to the divider. Then empty the buffer of everything
|
||||
# up to the end of the divider. Refill buffer to bufsize+maxbound
|
||||
# Note slightly odd organization. Code before BODY: really goes with
|
||||
# code following HEAD:, but is put first to 'pre-fill' buffers. BODY:
|
||||
# is placed before HEAD: because we first need to discard any 'preface,'
|
||||
# which would be analagous to a body without a preceeding head.
|
||||
|
||||
$left = $len;
|
||||
PART: # find each part of the multi-part while reading data
|
||||
while (1) {
|
||||
die $@ if $errflag;
|
||||
|
||||
$amt = ($left > $bufsize+$maxbound-length($buf)
|
||||
? $bufsize+$maxbound-length($buf): $left);
|
||||
$errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
|
||||
die "Short Read: wanted $amt, got $got\n" if $errflag;
|
||||
$left -= $amt;
|
||||
|
||||
$in{$name} .= "\0" if defined $in{$name};
|
||||
$in{$name} .= $fn if $fn;
|
||||
|
||||
$name=~/([-\w]+)/; # This allows $insfn{$name} to be untainted
|
||||
if (defined $1) {
|
||||
$insfn{$1} .= "\0" if defined $insfn{$1};
|
||||
$insfn{$1} .= $fn if $fn;
|
||||
}
|
||||
|
||||
BODY:
|
||||
while (($bpos = index($buf, $boundary)) == -1) {
|
||||
if ($left == 0 && $buf eq '') {
|
||||
foreach $value (values %insfn) {
|
||||
unlink(split("\0",$value));
|
||||
}
|
||||
&CgiDie("cgi-lib.pl: reached end of input while seeking boundary " .
|
||||
"of multipart. Format of CGI input is wrong.\n");
|
||||
}
|
||||
die $@ if $errflag;
|
||||
if ($name) { # if no $name, then it's the prologue -- discard
|
||||
if ($fn) { print FILE substr($buf, 0, $bufsize); }
|
||||
else { $in{$name} .= substr($buf, 0, $bufsize); }
|
||||
}
|
||||
$buf = substr($buf, $bufsize);
|
||||
$amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf);
|
||||
$errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
|
||||
die "Short Read: wanted $amt, got $got\n" if $errflag;
|
||||
$left -= $amt;
|
||||
}
|
||||
if (defined $name) { # if no $name, then it's the prologue -- discard
|
||||
if ($fn) { print FILE substr($buf, 0, $bpos-2); }
|
||||
else { $in {$name} .= substr($buf, 0, $bpos-2); } # kill last \r\n
|
||||
}
|
||||
close (FILE);
|
||||
last PART if substr($buf, $bpos + $blen, 2) eq "--";
|
||||
substr($buf, 0, $bpos+$blen+2) = '';
|
||||
$amt = ($left > $bufsize+$maxbound-length($buf)
|
||||
? $bufsize+$maxbound-length($buf) : $left);
|
||||
$errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
|
||||
die "Short Read: wanted $amt, got $got\n" if $errflag;
|
||||
$left -= $amt;
|
||||
|
||||
|
||||
undef $head; undef $fn;
|
||||
HEAD:
|
||||
while (($lpos = index($buf, "\r\n\r\n")) == -1) {
|
||||
if ($left == 0 && $buf eq '') {
|
||||
foreach $value (values %insfn) {
|
||||
unlink(split("\0",$value));
|
||||
}
|
||||
&CgiDie("cgi-lib: reached end of input while seeking end of " .
|
||||
"headers. Format of CGI input is wrong.\n$buf");
|
||||
}
|
||||
die $@ if $errflag;
|
||||
$head .= substr($buf, 0, $bufsize);
|
||||
$buf = substr($buf, $bufsize);
|
||||
$amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf);
|
||||
$errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
|
||||
die "Short Read: wanted $amt, got $got\n" if $errflag;
|
||||
$left -= $amt;
|
||||
}
|
||||
$head .= substr($buf, 0, $lpos+2);
|
||||
push (@in, $head);
|
||||
@heads = split("\r\n", $head);
|
||||
($cd) = grep (/^\s*Content-Disposition:/i, @heads);
|
||||
($ct) = grep (/^\s*Content-Type:/i, @heads);
|
||||
|
||||
($name) = $cd =~ /\bname="([^"]+)"/i; #";
|
||||
($name) = $cd =~ /\bname=([^\s:;]+)/i unless defined $name;
|
||||
|
||||
($fname) = $cd =~ /\bfilename="([^"]*)"/i; #"; # filename can be null-str
|
||||
($fname) = $cd =~ /\bfilename=([^\s:;]+)/i unless defined $fname;
|
||||
$incfn{$name} .= (defined $in{$name} ? "\0" : "") .
|
||||
(defined $fname ? $fname : "");
|
||||
|
||||
($ctype) = $ct =~ /^\s*Content-type:\s*"([^"]+)"/i; #";
|
||||
($ctype) = $ct =~ /^\s*Content-Type:\s*([^\s:;]+)/i unless defined $ctype;
|
||||
$inct{$name} .= (defined $in{$name} ? "\0" : "") . $ctype;
|
||||
|
||||
if ($writefiles && defined $fname) {
|
||||
$ser++;
|
||||
$fn = $writefiles . ".$$.$ser";
|
||||
open (FILE, ">$fn") || &CgiDie("Couldn't open $fn\n");
|
||||
binmode (FILE); # write files accurately
|
||||
}
|
||||
substr($buf, 0, $lpos+4) = '';
|
||||
undef $fname;
|
||||
undef $ctype;
|
||||
}
|
||||
|
||||
1;
|
||||
END_MULTIPART
|
||||
if ($errflag) {
|
||||
local ($errmsg, $value);
|
||||
$errmsg = $@ || $errflag;
|
||||
foreach $value (values %insfn) {
|
||||
unlink(split("\0",$value));
|
||||
}
|
||||
&CgiDie($errmsg);
|
||||
} else {
|
||||
# everything's ok.
|
||||
}
|
||||
} else {
|
||||
&CgiDie("cgi-lib.pl: Unknown Content-type: $ENV{'CONTENT_TYPE'}\n");
|
||||
}
|
||||
|
||||
# no-ops to avoid warnings
|
||||
$insfn = $insfn;
|
||||
$incfn = $incfn;
|
||||
$inct = $inct;
|
||||
|
||||
$^W = $perlwarn;
|
||||
|
||||
return ($errflag ? undef : scalar(@in));
|
||||
}
|
||||
|
||||
|
||||
# PrintHeader
|
||||
# Returns the magic line which tells WWW that we're an HTML document
|
||||
|
||||
sub PrintHeader {
|
||||
return "Content-type: text/html\n\n";
|
||||
}
|
||||
|
||||
|
||||
# HtmlTop
|
||||
# Returns the <head> of a document and the beginning of the body
|
||||
# with the title and a body <h1> header as specified by the parameter
|
||||
|
||||
sub HtmlTop
|
||||
{
|
||||
local ($title) = @_;
|
||||
|
||||
return <<END_OF_TEXT;
|
||||
<html>
|
||||
<head>
|
||||
<title>$title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>$title</h1>
|
||||
END_OF_TEXT
|
||||
}
|
||||
|
||||
|
||||
# HtmlBot
|
||||
# Returns the </body>, </html> codes for the bottom of every HTML page
|
||||
|
||||
sub HtmlBot
|
||||
{
|
||||
return "</body>\n</html>\n";
|
||||
}
|
||||
|
||||
|
||||
# SplitParam
|
||||
# Splits a multi-valued parameter into a list of the constituent parameters
|
||||
|
||||
sub SplitParam
|
||||
{
|
||||
local ($param) = @_;
|
||||
local (@params) = split ("\0", $param);
|
||||
return (wantarray ? @params : $params[0]);
|
||||
}
|
||||
|
||||
|
||||
# MethGet
|
||||
# Return true if this cgi call was using the GET request, false otherwise
|
||||
|
||||
sub MethGet {
|
||||
return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "GET");
|
||||
}
|
||||
|
||||
|
||||
# MethPost
|
||||
# Return true if this cgi call was using the POST request, false otherwise
|
||||
|
||||
sub MethPost {
|
||||
return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "POST");
|
||||
}
|
||||
|
||||
|
||||
# MyBaseUrl
|
||||
# Returns the base URL to the script (i.e., no extra path or query string)
|
||||
sub MyBaseUrl {
|
||||
local ($ret, $perlwarn);
|
||||
$perlwarn = $^W; $^W = 0;
|
||||
$ret = 'http://' . $ENV{'SERVER_NAME'} .
|
||||
($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') .
|
||||
$ENV{'SCRIPT_NAME'};
|
||||
$^W = $perlwarn;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# MyFullUrl
|
||||
# Returns the full URL to the script (i.e., with extra path or query string)
|
||||
sub MyFullUrl {
|
||||
local ($ret, $perlwarn);
|
||||
$perlwarn = $^W; $^W = 0;
|
||||
$ret = 'http://' . $ENV{'SERVER_NAME'} .
|
||||
($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') .
|
||||
$ENV{'SCRIPT_NAME'} . $ENV{'PATH_INFO'} .
|
||||
(length ($ENV{'QUERY_STRING'}) ? "?$ENV{'QUERY_STRING'}" : '');
|
||||
$^W = $perlwarn;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# MyURL
|
||||
# Returns the base URL to the script (i.e., no extra path or query string)
|
||||
# This is obsolete and will be removed in later versions
|
||||
sub MyURL {
|
||||
return &MyBaseUrl;
|
||||
}
|
||||
|
||||
|
||||
# CgiError
|
||||
# Prints out an error message which which containes appropriate headers,
|
||||
# markup, etcetera.
|
||||
# Parameters:
|
||||
# If no parameters, gives a generic error message
|
||||
# Otherwise, the first parameter will be the title and the rest will
|
||||
# be given as different paragraphs of the body
|
||||
|
||||
sub CgiError {
|
||||
local (@msg) = @_;
|
||||
local ($i,$name);
|
||||
|
||||
if (!@msg) {
|
||||
$name = &MyFullUrl;
|
||||
@msg = ("Error: script $name encountered fatal error\n");
|
||||
};
|
||||
|
||||
if (!$cgi_lib'headerout) { #')
|
||||
print &PrintHeader;
|
||||
print "<html>\n<head>\n<title>$msg[0]</title>\n</head>\n<body>\n";
|
||||
}
|
||||
print "<h1>$msg[0]</h1>\n";
|
||||
foreach $i (1 .. $#msg) {
|
||||
print "<p>$msg[$i]</p>\n";
|
||||
}
|
||||
|
||||
$cgi_lib'headerout++;
|
||||
}
|
||||
|
||||
|
||||
# CgiDie
|
||||
# Identical to CgiError, but also quits with the passed error message.
|
||||
|
||||
sub CgiDie {
|
||||
local (@msg) = @_;
|
||||
&CgiError (@msg);
|
||||
die @msg;
|
||||
}
|
||||
|
||||
|
||||
# PrintVariables
|
||||
# Nicely formats variables. Three calling options:
|
||||
# A non-null associative array - prints the items in that array
|
||||
# A type-glob - prints the items in the associated assoc array
|
||||
# nothing - defaults to use %in
|
||||
# Typical use: &PrintVariables()
|
||||
|
||||
sub PrintVariables {
|
||||
local (*in) = @_ if @_ == 1;
|
||||
local (%in) = @_ if @_ > 1;
|
||||
local ($out, $key, $output);
|
||||
|
||||
$output = "\n<dl compact>\n";
|
||||
foreach $key (sort keys(%in)) {
|
||||
foreach (split("\0", $in{$key})) {
|
||||
($out = $_) =~ s/\n/<br>\n/g;
|
||||
$output .= "<dt><b>$key</b>\n <dd>:<i>$out</i>:<br>\n";
|
||||
}
|
||||
}
|
||||
$output .= "</dl>\n";
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
# PrintEnv
|
||||
# Nicely formats all environment variables and returns HTML string
|
||||
sub PrintEnv {
|
||||
&PrintVariables(*ENV);
|
||||
}
|
||||
|
||||
|
||||
# The following lines exist only to avoid warning messages
|
||||
$cgi_lib'writefiles = $cgi_lib'writefiles;
|
||||
$cgi_lib'bufsize = $cgi_lib'bufsize ;
|
||||
$cgi_lib'maxbound = $cgi_lib'maxbound;
|
||||
$cgi_lib'version = $cgi_lib'version;
|
||||
$cgi_lib'filepre = $cgi_lib'filepre;
|
||||
|
||||
1; #return true
|
||||
|
|
@ -0,0 +1,450 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: cscope,v 1.2 2007/01/07 12:34:01 broeker Exp $
|
||||
#
|
||||
# WebCscope: A web interface to the cscope application
|
||||
# Copyright (C) 2001, Ragho Mahalingam <ragho@mahalingam.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Change History:
|
||||
#
|
||||
# $Log: cscope,v $
|
||||
# Revision 1.2 2007/01/07 12:34:01 broeker
|
||||
# Direct attention to security issues with webcscope.
|
||||
#
|
||||
# Revision 1.1 2001/06/29 14:20:16 petr
|
||||
# Added webcscope to contribs.
|
||||
#
|
||||
# Revision 1.3.4.1 2001/02/05 15:14:34 rmahalin
|
||||
# initial release with some bug fixes
|
||||
#
|
||||
# Revision 1.3.3.1 2001/01/22 22:21:23 rmahalin
|
||||
# added multi-database support
|
||||
# fixed cookie support for trivial functions; removed global trivials
|
||||
# added syntax highlighting for files displayed on browser
|
||||
#
|
||||
# Revision 1.3.1.1 2001/01/11 22:17:30 rmahalin
|
||||
# added direct download with mime-type 'text/c-source' and made cosmetic changes
|
||||
#
|
||||
# Revision 1.3 2001/01/11 21:36:39 rmahalin
|
||||
# *** empty log message ***
|
||||
#
|
||||
# Revision 1.2 2001/01/11 21:34:13 rmahalin
|
||||
# incorporated draft feedback changes
|
||||
#
|
||||
# Revision 1.1 2001/01/11 21:19:32 rmahalin
|
||||
# Initial revision
|
||||
#
|
||||
|
||||
require "cgi-lib.pl";
|
||||
|
||||
# current code version being used
|
||||
$version = "iSOS 2.5/int16";
|
||||
# full path to the cscope binary
|
||||
$cscopecmd = "/usr/global/bin/cscope";
|
||||
# cscope working directory, where all the in/out and db files are stored
|
||||
$cscopedir = "/usr/local/cscope";
|
||||
# trivial functions not to display, one per line in the trivs file
|
||||
$trivs = "/usr/local/htdocs/cscope/trivials";
|
||||
# temporary storage directory
|
||||
$tmpdir = "/tmp";
|
||||
$tmpinfile = $tmpdir . "/cscopein.$$";
|
||||
$tmpoutfile = $tmpdir . "/cscopeout.$$";
|
||||
$showfile = $tmpdir . "/showfile.$$";
|
||||
# C syntax highlighting application or uncomment the line beneath to just cat
|
||||
#$hiliter = "/bin/cat";
|
||||
$hiliter = "/usr/local/cgi-bin/cscope/hilite";
|
||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time+1000000);
|
||||
$cookie_exp = sprintf("%s %02d-%s-%s %02d:%02d:%02d GMT", $wday, $mday, $mon, $year, $hour, $min, $sec);
|
||||
|
||||
# standard images, from the apache distribution
|
||||
$img{openfile} = "/icons/folder.gif";
|
||||
$img{downloadfile} = "/icons/folder.open.gif";
|
||||
$img{csymbol} = "/icons/c.gif";
|
||||
$img{upfunc} = "/icons/up.gif";
|
||||
$img{downfunc} = "/icons/down.gif";
|
||||
$img{globalfunc} = "/icons/world2.gif";
|
||||
$img{trashfunc} = "/icons/bomb.gif";
|
||||
$img{untrashfunc} = "/icons/back.gif";
|
||||
$img{back} = "/icons/left.gif";
|
||||
|
||||
# feedback details
|
||||
$comment{name} = "Ragho Mahalingam";
|
||||
$comment{email} = "ragho\@mahalingam.com";
|
||||
|
||||
# operations allowed
|
||||
@oper = ( "Find this C symbol",
|
||||
"Find this global symbol",
|
||||
"Find functions called by",
|
||||
"Find functions calling",
|
||||
"Find this text string",
|
||||
"---------------------",
|
||||
"Find this egrep pattern",
|
||||
"Find this file",
|
||||
"Find files #including this file" );
|
||||
|
||||
# -- removed global trivial function list in favor of customized trivials
|
||||
#open(TRIVIAL_FUNC, $trivs);
|
||||
#@trivial = <TRIVIAL_FUNC>;
|
||||
#close(TRIVIAL_FUNC);
|
||||
@trivial = ();
|
||||
|
||||
MAIN:
|
||||
|
||||
{
|
||||
$starttime = time;
|
||||
|
||||
if (&ReadParse(*input)) {
|
||||
&ProcessCookie;
|
||||
&ProcessForm;
|
||||
} else {
|
||||
&PrintForm;
|
||||
}
|
||||
}
|
||||
|
||||
sub ProcessCookie {
|
||||
|
||||
if ( defined $ENV{HTTP_COOKIE} ) {
|
||||
($var, $val) = split('=',$ENV{HTTP_COOKIE});
|
||||
$Cookie{$var} = $val;
|
||||
if ( defined $Cookie{'cs-trivf'} ) {
|
||||
# do nothing, else initialize it to null
|
||||
} else {
|
||||
$Cookie{'cs-trivf'} = "defined";
|
||||
}
|
||||
@loc_trivial = split(',', $Cookie{'cs-trivf'});
|
||||
@trivial = ( @loc_trivial );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
sub ProcessTrashForm {
|
||||
|
||||
if ( defined $input{'trash'} ) {
|
||||
@trivial = (@trivial, $input{'func'});
|
||||
} else {
|
||||
@tmptriv = ();
|
||||
for ($i=0; $i <= $#trivial; $i++) {
|
||||
$fhash = unpack('H*', $input{'func'});
|
||||
$thash = unpack('H*', $trivial[$i]);
|
||||
if ( $fhash != $thash ) {
|
||||
@tmptriv = ( @tmptriv, $trivial[$i] );
|
||||
}
|
||||
}
|
||||
@trivial = @tmptriv;
|
||||
}
|
||||
|
||||
$Cookie{'cs-trivf'} = join(',',@trivial);
|
||||
|
||||
print "Content-type: text/html\n";
|
||||
print "Set-Cookie: cs-trivf=$Cookie{'cs-trivf'}; path=$ENV{SCRIPT_NAME}; expires $cookie_exp\n\n";
|
||||
print &HtmlTop("Your WebCScope Trivial Functions");
|
||||
print "<ul>";
|
||||
for ($i=0; $i <= $#trivial; $i++) {
|
||||
print "<li><a href=\"$ENV{SCRIPT_NAME}?untrash=&func=$trivial[$i]\"><img src=$img{untrashfunc} border=0></a> $trivial[$i]";
|
||||
}
|
||||
print "</ul><hr>\n";
|
||||
print "Click <a href=\"#\" onClick=\"history.back();\"><img src=$img{back} border=0></a> to go back.\n";
|
||||
print &HtmlBot;
|
||||
|
||||
}
|
||||
|
||||
sub ProcessForm {
|
||||
|
||||
chdir $cscopedir;
|
||||
opendir(DIRLIST,$cscopedir);
|
||||
@dirlist = readdir(DIRLIST);
|
||||
closedir(DIRLIST);
|
||||
|
||||
if ( $input{'db'} eq "all" ) {
|
||||
@csdirs = ();
|
||||
for ($i=0; $i <= $#dirlist; $i++ ) {
|
||||
if ( ($dirlist[$i] ne ".") && ($dirlist[$i] ne "..") && ( -d $dirlist[$i] ) ) {
|
||||
@csdirs = ( @csdirs, $dirlist[$i] );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@csdirs = ( $input{'db'} );
|
||||
}
|
||||
|
||||
$op = $input{'op'};
|
||||
$arg = $input{'arg'};
|
||||
$shtriv = $input{'triv'};
|
||||
$db = $input{'db'};
|
||||
|
||||
if ( defined $input{'fshow'} ) { &ShowFileForm; exit; }
|
||||
if ( defined $input{'load'} ) { &DownloadFileForm; exit; }
|
||||
if ( (defined $input{'trash'}) || (defined $input{'untrash'}) ) {
|
||||
&ProcessTrashForm; exit; }
|
||||
|
||||
print &PrintHeader;
|
||||
print &HtmlTop ("WebCscope");
|
||||
print <<ENDOFHDR;
|
||||
<h3>Instructions</h3><p>
|
||||
<ul>
|
||||
<li><img src=$img{csymbol}> will find a symbol with this name<br>
|
||||
<li><img src=$img{upfunc}> will find functions <i>calling</i> this function<br>
|
||||
<li><img src=$img{downfunc}> will find functions <i>called</i> by this
|
||||
function<br>
|
||||
<li><img src=$img{globalfunc}> will locate a global definition of this name<br>
|
||||
<li><img src=$img{openfile}> will display this file and highlight
|
||||
the fragment line<br>
|
||||
<li><img src=$img{downloadfile}> will download this file with mimetype "text/c-source"<br>
|
||||
<li><img src=$img{trashfunc}> will add this symbol/function to your trivial list<br>
|
||||
</ul>
|
||||
<p><hr>
|
||||
ENDOFHDR
|
||||
|
||||
foreach $index ( 0 .. $#csdirs ) {
|
||||
|
||||
unlink $tmpinfile, $tmpoutfile;
|
||||
open(CSCOPEIN, ">$tmpinfile");
|
||||
print CSCOPEIN "$op$arg\n";
|
||||
print CSCOPEIN "exit\n";
|
||||
close(CSCOPEIN);
|
||||
|
||||
$dbdir = $cscopedir . "/" . $csdirs[$index];
|
||||
chdir($dbdir);
|
||||
|
||||
$syscmd = "cd $dbdir; $cscopecmd -d -l < $tmpinfile > $tmpoutfile;";
|
||||
system($syscmd);
|
||||
|
||||
$count = 1;
|
||||
open(CSCOPEIN, "$tmpoutfile");
|
||||
|
||||
$line = <CSCOPEIN>;
|
||||
@temp = split(' ',$line);
|
||||
$numresult = $temp[2];
|
||||
|
||||
print <<ENDOFHDRs;
|
||||
<h2>Search Results from <b>$csdirs[$index]</b></h2>
|
||||
<font size=+1>$oper[$op]: <b>$arg</b></font><br>
|
||||
Matches: $numresult<p>
|
||||
<table border=1 cellpadding=2 cellspacing=2>
|
||||
<tr><td><b>Num</b></td><td><b>File</b></td><td><b>Function</b></td>
|
||||
<td><b>Line</b></td><td><b>Fragment</b></td></tr>
|
||||
ENDOFHDRs
|
||||
|
||||
$trivs_rm = 0;
|
||||
|
||||
for ($i=0; $i < $numresult; $i++ ) {
|
||||
$line = <CSCOPEIN>;
|
||||
@fields = split(' ',$line);
|
||||
$file = shift @fields;
|
||||
$fshowfile = $file;
|
||||
$func = shift @fields;
|
||||
$lnum = shift @fields;
|
||||
@filef = split('/',$file);
|
||||
$file = $filef[$#filef];
|
||||
$frag = join(' ',@fields);
|
||||
|
||||
if ( ! $shtriv ) {
|
||||
for ( $j=0; $j <= $#trivial; $j++ )
|
||||
{
|
||||
$fhash = unpack('H*', $func);
|
||||
$thash = unpack('H*', $trivial[$j]);
|
||||
if ( $fhash == $thash ) { $trivs_rm++; goto done; }
|
||||
}
|
||||
}
|
||||
|
||||
if ( $func ne "<global>" && $func ne "<unknown>" ) {
|
||||
print <<ENDOFBODY1;
|
||||
<tr><td>$count</td>
|
||||
<td><a href="$ENV{SCRIPT_NAME}?fshow=1&fshowfile=$fshowfile&line=$lnum&db=$db">
|
||||
<img src=$img{openfile} border=0></a> $file
|
||||
<a href="$ENV{SCRIPT_NAME}?load=1&file=$fshowfile&db=$db">
|
||||
<img src=$img{downloadfile} border=0></a>
|
||||
</td>
|
||||
<td><a href="$ENV{SCRIPT_NAME}?op=0&triv=$shtriv&arg=$func&db=$db">
|
||||
<img src=$img{csymbol} border=0></a>
|
||||
<a href="$ENV{SCRIPT_NAME}?op=3&triv=$shtriv&arg=$func&db=$db">
|
||||
<img src=$img{upfunc} border=0></a>
|
||||
$func
|
||||
<a href="$ENV{SCRIPT_NAME}?op=2&triv=$shtriv&arg=$func&db=$db">
|
||||
<img src=$img{downfunc} border=0></a>
|
||||
<a href="$ENV{SCRIPT_NAME}?op=1&triv=$shtriv&arg=$func&db=$db">
|
||||
<img src=$img{globalfunc} border=0></a>
|
||||
<a href="$ENV{SCRIPT_NAME}?trash=&func=$func&db=$db">
|
||||
<img src=$img{trashfunc} border=0></a>
|
||||
</td>
|
||||
<td>$lnum</td>
|
||||
<td>$frag</td></tr>
|
||||
ENDOFBODY1
|
||||
|
||||
} else {
|
||||
$func =~ tr/<>/[]/;
|
||||
print <<ENDOFBODY2;
|
||||
<tr><td>$count</td>
|
||||
<td><a href="$ENV{SCRIPT_NAME}?fshow=1&fshowfile=$fshowfile&line=$lnum&db=$db">
|
||||
<img src=$img{openfile} border=0></a> $file
|
||||
<a href="$ENV{SCRIPT_NAME}?load=1&file=$fshowfile&db=$db">
|
||||
<img src=$img{downloadfile} border=0></a>
|
||||
</td>
|
||||
<td>$func</td>
|
||||
<td>$lnum</td>
|
||||
<td><$frag</td></tr>
|
||||
ENDOFBODY2
|
||||
|
||||
}
|
||||
|
||||
$count++;
|
||||
done:
|
||||
|
||||
}
|
||||
|
||||
close(CSCOPEIN);
|
||||
print "</table>\n";
|
||||
print "<br>Eliminated $trivs_rm line item(s) as trivial functions<p><hr>\n";
|
||||
unlink $tmpinfile, $tmpoutfile;
|
||||
|
||||
}
|
||||
|
||||
print &OperationTime;
|
||||
print &Feedback;
|
||||
print &HtmlBot;
|
||||
|
||||
}
|
||||
|
||||
sub DownloadFileForm {
|
||||
$file = $input{'file'};
|
||||
print "Content-type: text/c-source\n\n";
|
||||
open(SHOWFILE, $file);
|
||||
while (<SHOWFILE>) { print; }
|
||||
close(SHOWFILE);
|
||||
}
|
||||
|
||||
sub ShowFileForm {
|
||||
|
||||
$file = $input{'fshowfile'};
|
||||
$lnum = $input{'line'};
|
||||
|
||||
print &PrintHeader;
|
||||
print &HtmlTop ("WebCscope");
|
||||
print "<b>Note</b>: Click <a href=#ref><img src=$img{downfunc} border=0></a> to go to the reference line<p><hr>\n";
|
||||
print "<hr>";
|
||||
|
||||
unlink $showfile;
|
||||
system("$hiliter $file > $showfile");
|
||||
open(SHOWFILE, $showfile);
|
||||
|
||||
$curline = 1;
|
||||
while ( <SHOWFILE> ) {
|
||||
$line = $_;
|
||||
if ( $curline == $lnum ) {
|
||||
print "<a name=ref><blink>$line</blink>";
|
||||
} else {
|
||||
print $line;
|
||||
}
|
||||
$curline++;
|
||||
}
|
||||
|
||||
close (SHOWFILE);
|
||||
|
||||
|
||||
|
||||
print &OperationTime;
|
||||
print &Feedback;
|
||||
print &HtmlBot;
|
||||
}
|
||||
|
||||
sub PrintForm {
|
||||
|
||||
chdir $cscopedir;
|
||||
opendir(DIRLIST,$cscopedir);
|
||||
@dirlist = readdir(DIRLIST);
|
||||
closedir(DIRLIST);
|
||||
|
||||
@csdirs = ();
|
||||
for ($i=0; $i <= $#dirlist; $i++ ) {
|
||||
if ( ($dirlist[$i] ne ".") && ($dirlist[$i] ne "..") && ( -d $dirlist[$i] ) ) {
|
||||
@csdirs = ( @csdirs, $dirlist[$i] );
|
||||
}
|
||||
}
|
||||
|
||||
print &PrintHeader;
|
||||
print &HtmlTop ("Web-CScope");
|
||||
|
||||
print <<ENDOFTEXTA;
|
||||
<p style="color:red">Be aware that this webfrontend is insecure and allows viewing ALL apache readable files, including your configuration!</p>
|
||||
Select an operation below and enter a symbol, function or text to search in
|
||||
the database. The active version is $version. Input is case-sensitive,
|
||||
so if your search returns no results, check the case and the symbol name.<hr>
|
||||
<form method="get" action="$ENV{SCRIPT_NAME}">
|
||||
<table border=0 cellpadding=2 cellspacing=2>
|
||||
<tr>
|
||||
<td>Operation:</td>
|
||||
<td>
|
||||
<select name="op">
|
||||
ENDOFTEXTA
|
||||
|
||||
foreach $opi ( 0 .. $#oper ) {
|
||||
print "<option value=$opi>$oper[$opi]";
|
||||
}
|
||||
|
||||
print <<ENDOFTEXTB;
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CScope Database:</td>
|
||||
<td>
|
||||
<select name="db">
|
||||
<option selected value="all">All Databases
|
||||
ENDOFTEXTB
|
||||
|
||||
for ($i=0; $i <= $#csdirs; $i++) {
|
||||
print " <option value=\"$csdirs[$i]\">$csdirs[$i]\n";
|
||||
}
|
||||
|
||||
print <<ENDOFTEXT2;
|
||||
</select>
|
||||
<tr>
|
||||
<td>Symbol, function or text:</td>
|
||||
<td><input name="arg" size=30></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td halign=center>Show trivial functions:
|
||||
<input type=radio name="triv" value=1>Yes
|
||||
<input type=radio name="triv" value=0 checked>No
|
||||
<br><br>
|
||||
<input type="submit" value="Scope It!"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>
|
||||
</form>
|
||||
ENDOFTEXT2
|
||||
|
||||
print &Feedback;
|
||||
print &HtmlBot;
|
||||
}
|
||||
|
||||
sub Feedback {
|
||||
|
||||
$feedback = "<font size=-1>";
|
||||
$feedback .= '$Id: cscope,v 1.2 2007/01/07 12:34:01 broeker Exp $<br>';
|
||||
$feedback .= "$comment{name}<i><";
|
||||
$feedback .= "<a href=\"mailto:$comment{email}\">";
|
||||
$feedback .= "$comment{email}</a>></i></font>";
|
||||
return $feedback;
|
||||
}
|
||||
|
||||
sub OperationTime {
|
||||
|
||||
$deltime = time - $starttime;
|
||||
return "Operation took $deltime second(s)<br>";
|
||||
|
||||
}
|
|
@ -0,0 +1,360 @@
|
|||
/*
|
||||
CopyRight (C) 1999, Dmitry Obukhov, dso@usa.net
|
||||
mailto: dso@usa.net
|
||||
http://www.EmbeddedStuff.com
|
||||
|
||||
----------------------------------------------
|
||||
Last modified 6 Apr 97
|
||||
----------------------------------------------
|
||||
Converts C (C++) source to HTML code fragment
|
||||
with syntax highlighting.
|
||||
Since program written for personal purpose
|
||||
the <TABLE> tags generated. This is optional
|
||||
page format specific thing.
|
||||
|
||||
Usage: CTHM <input_file>. All output is done
|
||||
to STDOUTPUT, error messages to STDERR.
|
||||
For HTML fragment generation:
|
||||
CHTM file.c > file.htm
|
||||
|
||||
- Some input convertion required to use this
|
||||
code as CGI module. Will be done soon.
|
||||
- Optimization required for blocks of EOL
|
||||
comments
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
// ------------------- Decoding status values
|
||||
|
||||
#define START 0
|
||||
#define INLINE 1
|
||||
#define DEFINE 2
|
||||
// ------------------- Decoding Remark
|
||||
#define REM1 20
|
||||
#define REM2 21
|
||||
#define REM_END 22
|
||||
#define REM_STAR 23
|
||||
#define REM_STAR_1 24
|
||||
#define STRING 25 // String is "like" remark
|
||||
|
||||
|
||||
// ------------------- HTML TAG Generation
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
|
||||
// ------------------- HTML TAG type
|
||||
#define MODE_KEYWORD 0
|
||||
#define MODE_REMARK 2
|
||||
#define MODE_REMARK_EOL 4
|
||||
#define MODE_DEFINE 6
|
||||
#define MODE_STRING 8
|
||||
|
||||
|
||||
int is_delimeter(char c)
|
||||
{
|
||||
int ii=0;
|
||||
char dlms[] =
|
||||
"\t\r\n (){}[]+-*/%\"'&|^~:;<>.,";
|
||||
//--------------------------------
|
||||
while (dlms[ii])
|
||||
{
|
||||
if (c==dlms[ii++]) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int is_keyword(char * str)
|
||||
{
|
||||
char * kwords[] =
|
||||
{
|
||||
"asm", "auto",
|
||||
"break", "case",
|
||||
"cdecl", "char",
|
||||
"class", "const",
|
||||
"continue", "default",
|
||||
"delete", "do",
|
||||
"double", "else",
|
||||
"enum", "extern",
|
||||
"far", "float",
|
||||
"for", "friend",
|
||||
"goto", "huge",
|
||||
"if", "inline",
|
||||
"int", "interrupt",
|
||||
"long", "near",
|
||||
"new", "operator",
|
||||
"pascal", "private",
|
||||
"protected", "public",
|
||||
"register", "return",
|
||||
"short", "signed",
|
||||
"sizeof", "static",
|
||||
"struct", "switch",
|
||||
"template", "this",
|
||||
"typedef", "union",
|
||||
"unsigned", "virtual",
|
||||
"void", "volatile",
|
||||
"while", NULL
|
||||
};
|
||||
int ii=0;
|
||||
int jj;
|
||||
int check;
|
||||
|
||||
while (kwords[ii])
|
||||
{
|
||||
jj = 0;
|
||||
check = 1;
|
||||
while (kwords[ii][jj] && check)
|
||||
{
|
||||
if (str[jj] != kwords[ii][jj])
|
||||
{
|
||||
check = 0;
|
||||
}
|
||||
jj++;
|
||||
}
|
||||
if (check) return 1;
|
||||
ii++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void set_mode(int on_off, int mode)
|
||||
{
|
||||
char * tags[] =
|
||||
{
|
||||
//-------------------- KEYWORD
|
||||
"<strong>",
|
||||
"</strong>",
|
||||
//-------------------- Classic remarks
|
||||
"<font color=\"#336600\">",
|
||||
"</font>",
|
||||
//-------------------- EOL Remarks
|
||||
"<font color=\"#336600\">",
|
||||
"</font>",
|
||||
//-------------------- #DEFINE
|
||||
"<font color=\"#663300\"><strong>",
|
||||
"</strong></font>",
|
||||
//-------------------- "string"
|
||||
"<font color=\"#0000CC\">",
|
||||
"</font>",
|
||||
NULL, NULL
|
||||
};
|
||||
fprintf(stdout,tags[mode + 1 - on_off]);
|
||||
}
|
||||
|
||||
void print_char_html(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '<':
|
||||
fprintf(stdout,"<");
|
||||
break;
|
||||
case '>':
|
||||
fprintf(stdout,">");
|
||||
break;
|
||||
case '"':
|
||||
fprintf(stdout,""");
|
||||
break;
|
||||
case '&':
|
||||
fprintf(stdout,"&");
|
||||
break;
|
||||
case '|':
|
||||
fprintf(stdout,"¦");
|
||||
break;
|
||||
default:
|
||||
fprintf(stdout,"%c",c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(int _argc, char** _argv)
|
||||
{
|
||||
FILE *in, *out;
|
||||
char c;
|
||||
int mode;
|
||||
char buf[80];
|
||||
int bufidx = 0;
|
||||
int progress = 1;
|
||||
int echo;
|
||||
int saved_mode;
|
||||
int kw;
|
||||
char tmpc;
|
||||
char prevc;
|
||||
|
||||
if (_argc < 2)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"USAGE: c2html <file>\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
if ((in = fopen(_argv[1], "rt")) == NULL)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Cannot open input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
fprintf(stdout, "<pre>");
|
||||
mode = START;
|
||||
|
||||
while (!feof(in) && progress)
|
||||
{
|
||||
echo = 1;
|
||||
prevc = c;
|
||||
c = fgetc(in);
|
||||
|
||||
if (c=='/' && (mode < REM1))
|
||||
{
|
||||
saved_mode = mode;
|
||||
mode = REM1;
|
||||
}
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case REM1:
|
||||
echo = 0;
|
||||
mode = REM2;
|
||||
break;
|
||||
|
||||
case REM2:
|
||||
if (c=='/')
|
||||
{
|
||||
if (saved_mode == DEFINE)
|
||||
{
|
||||
set_mode(OFF, MODE_DEFINE);
|
||||
}
|
||||
mode = REM_END;
|
||||
set_mode(ON, MODE_REMARK_EOL);
|
||||
}
|
||||
else if (c=='*')
|
||||
{
|
||||
if (saved_mode == DEFINE)
|
||||
{
|
||||
set_mode(OFF, MODE_DEFINE);
|
||||
}
|
||||
mode = REM_STAR;
|
||||
set_mode(ON, MODE_REMARK);
|
||||
}
|
||||
else
|
||||
{
|
||||
mode = saved_mode;
|
||||
}
|
||||
printf("/");
|
||||
break;
|
||||
|
||||
case REM_END:
|
||||
if (c=='\n')
|
||||
{
|
||||
set_mode(OFF, MODE_REMARK_EOL);
|
||||
}
|
||||
break;
|
||||
|
||||
case REM_STAR:
|
||||
if (c=='*')
|
||||
{
|
||||
mode = REM_STAR_1;
|
||||
}
|
||||
break;
|
||||
|
||||
case REM_STAR_1:
|
||||
if (c=='/')
|
||||
{
|
||||
mode = INLINE;
|
||||
fprintf(stdout,"/");
|
||||
echo = 0;
|
||||
set_mode(OFF, MODE_REMARK);
|
||||
}
|
||||
else mode = REM_STAR;
|
||||
break;
|
||||
|
||||
case START:
|
||||
if (c=='#')
|
||||
{
|
||||
mode = DEFINE;
|
||||
set_mode(ON, MODE_DEFINE);
|
||||
break;
|
||||
}
|
||||
else if (c==' ') break;
|
||||
|
||||
mode = INLINE;
|
||||
// and continue in next case
|
||||
|
||||
case INLINE:
|
||||
if (c=='"' && //
|
||||
prevc != 0x27 && //
|
||||
prevc != '\\') //
|
||||
{
|
||||
set_mode(ON, MODE_STRING);
|
||||
mode = STRING;
|
||||
}
|
||||
break;
|
||||
|
||||
case STRING:
|
||||
if (c=='"' && prevc != '\\')
|
||||
{
|
||||
print_char_html('"');
|
||||
set_mode(OFF, MODE_STRING);
|
||||
echo = 0;
|
||||
mode = INLINE;
|
||||
}
|
||||
break;
|
||||
|
||||
case DEFINE:
|
||||
if (c=='\n')
|
||||
{
|
||||
set_mode(OFF, MODE_DEFINE);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (echo && //
|
||||
(mode == INLINE || //
|
||||
(mode!=INLINE && //
|
||||
bufidx))) //
|
||||
{
|
||||
buf[bufidx++] = c;
|
||||
buf[bufidx] = 0;
|
||||
if (is_delimeter(c))
|
||||
{
|
||||
kw = 0;
|
||||
if (bufidx>2)
|
||||
{
|
||||
kw = is_keyword(buf);
|
||||
}
|
||||
if (kw)
|
||||
{
|
||||
set_mode(ON, MODE_KEYWORD);
|
||||
}
|
||||
tmpc = buf[bufidx-1];
|
||||
buf[bufidx-1] = 0;
|
||||
fprintf(stdout,"%s",buf);
|
||||
if (kw)
|
||||
{
|
||||
set_mode(OFF, MODE_KEYWORD);
|
||||
}
|
||||
print_char_html(tmpc);
|
||||
bufidx = 0;
|
||||
buf[0] = 0;
|
||||
}
|
||||
}
|
||||
else if (echo) print_char_html(c);
|
||||
|
||||
if (c=='\n' && mode != REM_STAR)
|
||||
{
|
||||
mode = START;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
fprintf(stdout,"</pre>\n");
|
||||
fprintf(stdout,
|
||||
"<!-- == Generated by CHTM convertor -->\n");
|
||||
fprintf(stdout,
|
||||
"<!-- == CopyRight (C) 1999, Dmitry Obukhov, dso@usa.net -->\n");
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
/back.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/bomb.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/c.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/down.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/folder.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/folder.open.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/left.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/up.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
/world2.gif/1.3/Fri Jun 29 15:58:08 2001/-kb/
|
||||
D
|
|
@ -0,0 +1,9 @@
|
|||
/back.gif////
|
||||
/bomb.gif////
|
||||
/c.gif////
|
||||
/down.gif////
|
||||
/folder.gif////
|
||||
/folder.open.gif////
|
||||
/left.gif////
|
||||
/up.gif////
|
||||
/world2.gif////
|
|
@ -0,0 +1 @@
|
|||
cscope/contrib/webcscope/icons
|
|
@ -0,0 +1 @@
|
|||
:ssh;username=broeker;hostname=cscope.cvs.sourceforge.net:/cvsroot/cscope
|
Binary file not shown.
After Width: | Height: | Size: 216 B |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue