pygments.rb 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/CHANGELOG.adoc +5 -0
- data/bench.rb +2 -2
- data/lib/pygments/lexer.rb +1 -1
- data/lib/pygments/mentos.py +6 -4
- data/lib/pygments/popen.rb +14 -7
- data/lib/pygments/version.rb +1 -1
- data/lib/pygments.rb +8 -2
- data/pygments.rb.gemspec +4 -4
- data/test/test_pygments.rb +13 -7
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/AUTHORS +8 -1
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/INSTALLER +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/LICENSE +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/METADATA +1 -1
- data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +524 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/REQUESTED +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/WHEEL +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/entry_points.txt +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/top_level.txt +0 -0
- data/vendor/pygments-main/bin/pygmentize +1 -1
- data/vendor/pygments-main/pygments/__init__.py +1 -1
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -0
- data/vendor/pygments-main/pygments/formatters/html.py +20 -7
- data/vendor/pygments-main/pygments/formatters/pangomarkup.py +83 -0
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +55 -14
- data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +401 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +68 -52
- data/vendor/pygments-main/pygments/lexers/actionscript.py +2 -2
- data/vendor/pygments-main/pygments/lexers/ambient.py +1 -1
- data/vendor/pygments-main/pygments/lexers/amdgpu.py +9 -4
- data/vendor/pygments-main/pygments/lexers/apdlexer.py +448 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +6 -3
- data/vendor/pygments-main/pygments/lexers/asc.py +51 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +86 -58
- data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
- data/vendor/pygments-main/pygments/lexers/bibtex.py +2 -2
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +60 -33
- data/vendor/pygments-main/pygments/lexers/c_like.py +102 -3
- data/vendor/pygments-main/pygments/lexers/cddl.py +2 -2
- data/vendor/pygments-main/pygments/lexers/chapel.py +53 -29
- data/vendor/pygments-main/pygments/lexers/clean.py +6 -6
- data/vendor/pygments-main/pygments/lexers/configs.py +133 -43
- data/vendor/pygments-main/pygments/lexers/csound.py +2 -2
- data/vendor/pygments-main/pygments/lexers/devicetree.py +1 -1
- data/vendor/pygments-main/pygments/lexers/dotnet.py +1 -1
- data/vendor/pygments-main/pygments/lexers/erlang.py +1 -1
- data/vendor/pygments-main/pygments/lexers/floscript.py +1 -1
- data/vendor/pygments-main/pygments/lexers/futhark.py +5 -4
- data/vendor/pygments-main/pygments/lexers/gcodelexer.py +36 -0
- data/vendor/pygments-main/pygments/lexers/go.py +1 -1
- data/vendor/pygments-main/pygments/lexers/graphics.py +1 -1
- data/vendor/pygments-main/pygments/lexers/graphviz.py +5 -4
- data/vendor/pygments-main/pygments/lexers/gsql.py +92 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +4 -4
- data/vendor/pygments-main/pygments/lexers/haxe.py +1 -1
- data/vendor/pygments-main/pygments/lexers/installers.py +2 -2
- data/vendor/pygments-main/pygments/lexers/javascript.py +145 -127
- data/vendor/pygments-main/pygments/lexers/jslt.py +94 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +135 -183
- data/vendor/pygments-main/pygments/lexers/jvm.py +262 -202
- data/vendor/pygments-main/pygments/lexers/kuin.py +299 -0
- data/vendor/pygments-main/pygments/lexers/lisp.py +18 -15
- data/vendor/pygments-main/pygments/lexers/markup.py +3 -3
- data/vendor/pygments-main/pygments/lexers/matlab.py +23 -10
- data/vendor/pygments-main/pygments/lexers/meson.py +155 -0
- data/vendor/pygments-main/pygments/lexers/mime.py +6 -21
- data/vendor/pygments-main/pygments/lexers/ml.py +1 -1
- data/vendor/pygments-main/pygments/lexers/nimrod.py +1 -1
- data/vendor/pygments-main/pygments/lexers/objective.py +3 -3
- data/vendor/pygments-main/pygments/lexers/parsers.py +1 -1
- data/vendor/pygments-main/pygments/lexers/procfile.py +43 -0
- data/vendor/pygments-main/pygments/lexers/promql.py +1 -1
- data/vendor/pygments-main/pygments/lexers/python.py +19 -5
- data/vendor/pygments-main/pygments/lexers/resource.py +1 -1
- data/vendor/pygments-main/pygments/lexers/rnc.py +1 -1
- data/vendor/pygments-main/pygments/lexers/ruby.py +1 -1
- data/vendor/pygments-main/pygments/lexers/rust.py +9 -10
- data/vendor/pygments-main/pygments/lexers/scripting.py +7 -7
- data/vendor/pygments-main/pygments/lexers/shell.py +11 -8
- data/vendor/pygments-main/pygments/lexers/smithy.py +79 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +1 -1
- data/vendor/pygments-main/pygments/lexers/special.py +15 -2
- data/vendor/pygments-main/pygments/lexers/supercollider.py +1 -1
- data/vendor/pygments-main/pygments/lexers/tcl.py +3 -3
- data/vendor/pygments-main/pygments/lexers/teal.py +88 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +19 -19
- data/vendor/pygments-main/pygments/lexers/teraterm.py +1 -1
- data/vendor/pygments-main/pygments/lexers/testing.py +1 -1
- data/vendor/pygments-main/pygments/lexers/theorem.py +4 -2
- data/vendor/pygments-main/pygments/lexers/thingsdb.py +118 -0
- data/vendor/pygments-main/pygments/lexers/tnt.py +25 -15
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -1
- data/vendor/pygments-main/pygments/lexers/webassembly.py +120 -0
- data/vendor/pygments-main/pygments/regexopt.py +1 -1
- data/vendor/pygments-main/pygments/style.py +1 -1
- data/vendor/pygments-main/pygments/styles/__init__.py +2 -0
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -0
- data/vendor/pygments-main/pygments/styles/gruvbox.py +107 -0
- data/vendor/pygments-main/pygments/styles/native.py +1 -0
- metadata +29 -14
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +0 -494
@@ -272,7 +272,9 @@ class HtmlFormatter(Formatter):
|
|
272
272
|
125%``).
|
273
273
|
|
274
274
|
`hl_lines`
|
275
|
-
Specify a list of lines to be highlighted.
|
275
|
+
Specify a list of lines to be highlighted. The line numbers are always
|
276
|
+
relative to the input (i.e. the first line is line 1) and are
|
277
|
+
independent of `linenostart`.
|
276
278
|
|
277
279
|
.. versionadded:: 0.11
|
278
280
|
|
@@ -303,7 +305,7 @@ class HtmlFormatter(Formatter):
|
|
303
305
|
|
304
306
|
`lineanchors`
|
305
307
|
If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
|
306
|
-
output line in an anchor tag with
|
308
|
+
output line in an anchor tag with an ``id`` (and `name`) of ``foo-linenumber``.
|
307
309
|
This allows easy linking to certain lines.
|
308
310
|
|
309
311
|
.. versionadded:: 0.9
|
@@ -335,7 +337,9 @@ class HtmlFormatter(Formatter):
|
|
335
337
|
|
336
338
|
`filename`
|
337
339
|
A string used to generate a filename when rendering ``<pre>`` blocks,
|
338
|
-
for example if displaying source code.
|
340
|
+
for example if displaying source code. If `linenos` is set to
|
341
|
+
``'table'`` then the filename will be rendered in an initial row
|
342
|
+
containing a single `<th>` which spans both columns.
|
339
343
|
|
340
344
|
.. versionadded:: 2.1
|
341
345
|
|
@@ -691,11 +695,20 @@ class HtmlFormatter(Formatter):
|
|
691
695
|
|
692
696
|
ls = '\n'.join(lines)
|
693
697
|
|
698
|
+
# If a filename was specified, we can't put it into the code table as it
|
699
|
+
# would misalign the line numbers. Hence we emit a separate row for it.
|
700
|
+
filename_tr = ""
|
701
|
+
if self.filename:
|
702
|
+
filename_tr = (
|
703
|
+
'<tr><th colspan="2" class="filename"><div class="highlight">'
|
704
|
+
'<span class="filename">' + self.filename + '</span></div>'
|
705
|
+
'</th></tr>')
|
706
|
+
|
694
707
|
# in case you wonder about the seemingly redundant <div> here: since the
|
695
708
|
# content in the other cell also is wrapped in a div, some browsers in
|
696
709
|
# some configurations seem to mess up the formatting...
|
697
710
|
yield 0, (
|
698
|
-
'<table class="%stable">' % self.cssclass +
|
711
|
+
'<table class="%stable">' % self.cssclass + filename_tr +
|
699
712
|
'<tr><td class="linenos"><div class="linenodiv"><pre>' +
|
700
713
|
ls + '</pre></div></td><td class="code">'
|
701
714
|
)
|
@@ -752,7 +765,7 @@ class HtmlFormatter(Formatter):
|
|
752
765
|
for t, line in inner:
|
753
766
|
if t:
|
754
767
|
i += 1
|
755
|
-
yield 1, '<a name="%s-%d"></a>' % (s, i) + line
|
768
|
+
yield 1, '<a id="%s-%d" name="%s-%d"></a>' % (s, i, s, i) + line
|
756
769
|
else:
|
757
770
|
yield 0, line
|
758
771
|
|
@@ -788,7 +801,7 @@ class HtmlFormatter(Formatter):
|
|
788
801
|
style.append(self._pre_style)
|
789
802
|
style = '; '.join(style)
|
790
803
|
|
791
|
-
if self.filename:
|
804
|
+
if self.filename and self.linenos != 1:
|
792
805
|
yield 0, ('<span class="filename">' + self.filename + '</span>')
|
793
806
|
|
794
807
|
# the empty span here is to keep leading empty lines from being
|
@@ -877,7 +890,7 @@ class HtmlFormatter(Formatter):
|
|
877
890
|
|
878
891
|
def _lookup_ctag(self, token):
|
879
892
|
entry = ctags.TagEntry()
|
880
|
-
if self._ctags.find(entry, token, 0):
|
893
|
+
if self._ctags.find(entry, token.encode(), 0):
|
881
894
|
return entry['file'], entry['lineNumber']
|
882
895
|
else:
|
883
896
|
return None, None
|
@@ -0,0 +1,83 @@
|
|
1
|
+
"""
|
2
|
+
pygments.formatters.pangomarkup
|
3
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
+
|
5
|
+
Formatter for Pango markup output.
|
6
|
+
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
8
|
+
:license: BSD, see LICENSE for details.
|
9
|
+
"""
|
10
|
+
|
11
|
+
from pygments.formatter import Formatter
|
12
|
+
|
13
|
+
|
14
|
+
__all__ = ['PangoMarkupFormatter']
|
15
|
+
|
16
|
+
|
17
|
+
_escape_table = {
|
18
|
+
ord('&'): '&',
|
19
|
+
ord('<'): '<',
|
20
|
+
}
|
21
|
+
|
22
|
+
|
23
|
+
def escape_special_chars(text, table=_escape_table):
|
24
|
+
"""Escape & and < for Pango Markup."""
|
25
|
+
return text.translate(table)
|
26
|
+
|
27
|
+
|
28
|
+
class PangoMarkupFormatter(Formatter):
|
29
|
+
"""
|
30
|
+
Format tokens as Pango Markup code. It can then be rendered to an SVG.
|
31
|
+
|
32
|
+
.. versionadded:: 2.9
|
33
|
+
"""
|
34
|
+
|
35
|
+
name = 'Pango Markup'
|
36
|
+
aliases = ['pango', 'pangomarkup']
|
37
|
+
filenames = []
|
38
|
+
|
39
|
+
def __init__(self, **options):
|
40
|
+
Formatter.__init__(self, **options)
|
41
|
+
|
42
|
+
self.styles = {}
|
43
|
+
|
44
|
+
for token, style in self.style:
|
45
|
+
start = ''
|
46
|
+
end = ''
|
47
|
+
if style['color']:
|
48
|
+
start += '<span fgcolor="#%s">' % style['color']
|
49
|
+
end = '</span>' + end
|
50
|
+
if style['bold']:
|
51
|
+
start += '<b>'
|
52
|
+
end = '</b>' + end
|
53
|
+
if style['italic']:
|
54
|
+
start += '<i>'
|
55
|
+
end = '</i>' + end
|
56
|
+
if style['underline']:
|
57
|
+
start += '<u>'
|
58
|
+
end = '</u>' + end
|
59
|
+
self.styles[token] = (start, end)
|
60
|
+
|
61
|
+
def format_unencoded(self, tokensource, outfile):
|
62
|
+
lastval = ''
|
63
|
+
lasttype = None
|
64
|
+
|
65
|
+
outfile.write('<tt>')
|
66
|
+
|
67
|
+
for ttype, value in tokensource:
|
68
|
+
while ttype not in self.styles:
|
69
|
+
ttype = ttype.parent
|
70
|
+
if ttype == lasttype:
|
71
|
+
lastval += escape_special_chars(value)
|
72
|
+
else:
|
73
|
+
if lastval:
|
74
|
+
stylebegin, styleend = self.styles[lasttype]
|
75
|
+
outfile.write(stylebegin + lastval + styleend)
|
76
|
+
lastval = escape_special_chars(value)
|
77
|
+
lasttype = ttype
|
78
|
+
|
79
|
+
if lastval:
|
80
|
+
stylebegin, styleend = self.styles[lasttype]
|
81
|
+
outfile.write(stylebegin + lastval + styleend)
|
82
|
+
|
83
|
+
outfile.write('</tt>')
|
@@ -6,7 +6,35 @@
|
|
6
6
|
:license: BSD, see LICENSE for details.
|
7
7
|
"""
|
8
8
|
|
9
|
-
|
9
|
+
REMOVED_OPCODES = set('''
|
10
|
+
OSCsendA
|
11
|
+
beadsynt
|
12
|
+
beosc
|
13
|
+
buchla
|
14
|
+
getrowlin
|
15
|
+
lua_exec
|
16
|
+
lua_iaopcall
|
17
|
+
lua_iaopcall_off
|
18
|
+
lua_ikopcall
|
19
|
+
lua_ikopcall_off
|
20
|
+
lua_iopcall
|
21
|
+
lua_iopcall_off
|
22
|
+
lua_opdef
|
23
|
+
mp3scal_check
|
24
|
+
mp3scal_load
|
25
|
+
mp3scal_load2
|
26
|
+
mp3scal_play
|
27
|
+
mp3scal_play2
|
28
|
+
pvsgendy
|
29
|
+
socksend_k
|
30
|
+
signalflowgraph
|
31
|
+
sumTableFilter
|
32
|
+
systime
|
33
|
+
tabrowlin
|
34
|
+
vbap1move
|
35
|
+
'''.split())
|
36
|
+
|
37
|
+
# Opcodes in Csound 6.16.0 using:
|
10
38
|
# python3 -c "
|
11
39
|
# import re
|
12
40
|
# from subprocess import Popen, PIPE
|
@@ -209,6 +237,7 @@ ampmidicurve
|
|
209
237
|
ampmidid
|
210
238
|
apoleparams
|
211
239
|
arduinoRead
|
240
|
+
arduinoReadF
|
212
241
|
arduinoStart
|
213
242
|
arduinoStop
|
214
243
|
areson
|
@@ -216,6 +245,7 @@ aresonk
|
|
216
245
|
atone
|
217
246
|
atonek
|
218
247
|
atonex
|
248
|
+
autocorr
|
219
249
|
babo
|
220
250
|
balance
|
221
251
|
balance2
|
@@ -223,8 +253,6 @@ bamboo
|
|
223
253
|
barmodel
|
224
254
|
bbcutm
|
225
255
|
bbcuts
|
226
|
-
beadsynt
|
227
|
-
beosc
|
228
256
|
betarand
|
229
257
|
bexprnd
|
230
258
|
bformdec1
|
@@ -259,6 +287,7 @@ centroid
|
|
259
287
|
ceps
|
260
288
|
cepsinv
|
261
289
|
chanctrl
|
290
|
+
changed
|
262
291
|
changed2
|
263
292
|
chani
|
264
293
|
chano
|
@@ -293,6 +322,8 @@ cmp
|
|
293
322
|
cmplxprod
|
294
323
|
cntCreate
|
295
324
|
cntCycles
|
325
|
+
cntDelete
|
326
|
+
cntDelete_i
|
296
327
|
cntRead
|
297
328
|
cntReset
|
298
329
|
cntState
|
@@ -342,6 +373,11 @@ ctrl14
|
|
342
373
|
ctrl21
|
343
374
|
ctrl7
|
344
375
|
ctrlinit
|
376
|
+
ctrlpreset
|
377
|
+
ctrlprint
|
378
|
+
ctrlprintpresets
|
379
|
+
ctrlsave
|
380
|
+
ctrlselect
|
345
381
|
cuserrnd
|
346
382
|
dam
|
347
383
|
date
|
@@ -523,7 +559,6 @@ getcfg
|
|
523
559
|
getcol
|
524
560
|
getftargs
|
525
561
|
getrow
|
526
|
-
getrowlin
|
527
562
|
getseed
|
528
563
|
gogobel
|
529
564
|
grain
|
@@ -776,6 +811,7 @@ lagud
|
|
776
811
|
lastcycle
|
777
812
|
lenarray
|
778
813
|
lfo
|
814
|
+
lfsr
|
779
815
|
limit
|
780
816
|
limit1
|
781
817
|
lincos
|
@@ -836,14 +872,6 @@ lpreson
|
|
836
872
|
lpshold
|
837
873
|
lpsholdp
|
838
874
|
lpslot
|
839
|
-
lua_exec
|
840
|
-
lua_iaopcall
|
841
|
-
lua_iaopcall_off
|
842
|
-
lua_ikopcall
|
843
|
-
lua_ikopcall_off
|
844
|
-
lua_iopcall
|
845
|
-
lua_iopcall_off
|
846
|
-
lua_opdef
|
847
875
|
lufs
|
848
876
|
mac
|
849
877
|
maca
|
@@ -920,6 +948,7 @@ mp3scal
|
|
920
948
|
mp3sr
|
921
949
|
mpulse
|
922
950
|
mrtmsg
|
951
|
+
ms2st
|
923
952
|
mtof
|
924
953
|
mton
|
925
954
|
multitap
|
@@ -929,6 +958,7 @@ mvclpf1
|
|
929
958
|
mvclpf2
|
930
959
|
mvclpf3
|
931
960
|
mvclpf4
|
961
|
+
mvmfilter
|
932
962
|
mxadsr
|
933
963
|
nchnls_hw
|
934
964
|
nestedap
|
@@ -972,6 +1002,7 @@ oscils
|
|
972
1002
|
oscilx
|
973
1003
|
out
|
974
1004
|
out32
|
1005
|
+
outall
|
975
1006
|
outc
|
976
1007
|
outch
|
977
1008
|
outh
|
@@ -1279,11 +1310,13 @@ sc_lagud
|
|
1279
1310
|
sc_phasor
|
1280
1311
|
sc_trig
|
1281
1312
|
scale
|
1313
|
+
scale2
|
1282
1314
|
scalearray
|
1283
1315
|
scanhammer
|
1284
1316
|
scans
|
1285
1317
|
scantable
|
1286
1318
|
scanu
|
1319
|
+
scanu2
|
1287
1320
|
schedkwhen
|
1288
1321
|
schedkwhennamed
|
1289
1322
|
schedule
|
@@ -1333,6 +1366,7 @@ sin
|
|
1333
1366
|
sinh
|
1334
1367
|
sininv
|
1335
1368
|
sinsyn
|
1369
|
+
skf
|
1336
1370
|
sleighbells
|
1337
1371
|
slicearray
|
1338
1372
|
slicearray_i
|
@@ -1368,12 +1402,14 @@ spat3d
|
|
1368
1402
|
spat3di
|
1369
1403
|
spat3dt
|
1370
1404
|
spdist
|
1405
|
+
spf
|
1371
1406
|
splitrig
|
1372
1407
|
sprintf
|
1373
1408
|
sprintfk
|
1374
1409
|
spsend
|
1375
1410
|
sqrt
|
1376
1411
|
squinewave
|
1412
|
+
st2ms
|
1377
1413
|
statevar
|
1378
1414
|
sterrain
|
1379
1415
|
stix
|
@@ -1414,6 +1450,7 @@ subinstrinit
|
|
1414
1450
|
sum
|
1415
1451
|
sumarray
|
1416
1452
|
svfilter
|
1453
|
+
svn
|
1417
1454
|
syncgrain
|
1418
1455
|
syncloop
|
1419
1456
|
syncphasor
|
@@ -1454,7 +1491,6 @@ tabmorphak
|
|
1454
1491
|
tabmorphi
|
1455
1492
|
tabplay
|
1456
1493
|
tabrec
|
1457
|
-
tabrowlin
|
1458
1494
|
tabsum
|
1459
1495
|
tabw
|
1460
1496
|
tabw_i
|
@@ -1486,6 +1522,8 @@ transegr
|
|
1486
1522
|
trcross
|
1487
1523
|
trfilter
|
1488
1524
|
trhighest
|
1525
|
+
trigExpseg
|
1526
|
+
trigLinseg
|
1489
1527
|
trigger
|
1490
1528
|
trighold
|
1491
1529
|
trigphasor
|
@@ -1500,6 +1538,8 @@ trshift
|
|
1500
1538
|
trsplit
|
1501
1539
|
turnoff
|
1502
1540
|
turnoff2
|
1541
|
+
turnoff2_i
|
1542
|
+
turnoff3
|
1503
1543
|
turnon
|
1504
1544
|
tvconv
|
1505
1545
|
unirand
|
@@ -1523,6 +1563,7 @@ vbapmove
|
|
1523
1563
|
vbapz
|
1524
1564
|
vbapzmove
|
1525
1565
|
vcella
|
1566
|
+
vclpf
|
1526
1567
|
vco
|
1527
1568
|
vco2
|
1528
1569
|
vco2ft
|
@@ -1611,6 +1652,7 @@ window
|
|
1611
1652
|
wrap
|
1612
1653
|
writescratch
|
1613
1654
|
wterrain
|
1655
|
+
wterrain2
|
1614
1656
|
xadsr
|
1615
1657
|
xin
|
1616
1658
|
xout
|
@@ -1647,7 +1689,6 @@ DEPRECATED_OPCODES = set('''
|
|
1647
1689
|
array
|
1648
1690
|
bformdec
|
1649
1691
|
bformenc
|
1650
|
-
changed
|
1651
1692
|
copy2ftab
|
1652
1693
|
copy2ttab
|
1653
1694
|
hrtfer
|