Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/filters/__init__.py: 24%

168 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-20 06:09 +0000

1""" 

2 pygments.filters 

3 ~~~~~~~~~~~~~~~~ 

4 

5 Module containing filter lookup functions and default 

6 filters. 

7 

8 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. 

9 :license: BSD, see LICENSE for details. 

10""" 

11 

12import re 

13 

14from pygments.token import String, Comment, Keyword, Name, Error, Whitespace, \ 

15 string_to_tokentype 

16from pygments.filter import Filter 

17from pygments.util import get_list_opt, get_int_opt, get_bool_opt, \ 

18 get_choice_opt, ClassNotFound, OptionError 

19from pygments.plugin import find_plugin_filters 

20 

21 

22def find_filter_class(filtername): 

23 """Lookup a filter by name. Return None if not found.""" 

24 if filtername in FILTERS: 

25 return FILTERS[filtername] 

26 for name, cls in find_plugin_filters(): 

27 if name == filtername: 

28 return cls 

29 return None 

30 

31 

32def get_filter_by_name(filtername, **options): 

33 """Return an instantiated filter. 

34 

35 Options are passed to the filter initializer if wanted. 

36 Raise a ClassNotFound if not found. 

37 """ 

38 cls = find_filter_class(filtername) 

39 if cls: 

40 return cls(**options) 

41 else: 

42 raise ClassNotFound('filter %r not found' % filtername) 

43 

44 

45def get_all_filters(): 

46 """Return a generator of all filter names.""" 

47 yield from FILTERS 

48 for name, _ in find_plugin_filters(): 

49 yield name 

50 

51 

52def _replace_special(ttype, value, regex, specialttype, 

53 replacefunc=lambda x: x): 

54 last = 0 

55 for match in regex.finditer(value): 

56 start, end = match.start(), match.end() 

57 if start != last: 

58 yield ttype, value[last:start] 

59 yield specialttype, replacefunc(value[start:end]) 

60 last = end 

61 if last != len(value): 

62 yield ttype, value[last:] 

63 

64 

65class CodeTagFilter(Filter): 

66 """Highlight special code tags in comments and docstrings. 

67 

68 Options accepted: 

69 

70 `codetags` : list of strings 

71 A list of strings that are flagged as code tags. The default is to 

72 highlight ``XXX``, ``TODO``, ``FIXME``, ``BUG`` and ``NOTE``. 

73 

74 .. versionchanged:: 2.13 

75 Now recognizes ``FIXME`` by default. 

76 """ 

77 

78 def __init__(self, **options): 

79 Filter.__init__(self, **options) 

80 tags = get_list_opt(options, 'codetags', 

81 ['XXX', 'TODO', 'FIXME', 'BUG', 'NOTE']) 

82 self.tag_re = re.compile(r'\b(%s)\b' % '|'.join([ 

83 re.escape(tag) for tag in tags if tag 

84 ])) 

85 

86 def filter(self, lexer, stream): 

87 regex = self.tag_re 

88 for ttype, value in stream: 

89 if ttype in String.Doc or \ 

90 ttype in Comment and \ 

91 ttype not in Comment.Preproc: 

92 yield from _replace_special(ttype, value, regex, Comment.Special) 

93 else: 

94 yield ttype, value 

95 

96 

97class SymbolFilter(Filter): 

98 """Convert mathematical symbols such as \\<longrightarrow> in Isabelle 

99 or \\longrightarrow in LaTeX into Unicode characters. 

100 

101 This is mostly useful for HTML or console output when you want to 

102 approximate the source rendering you'd see in an IDE. 

103 

104 Options accepted: 

105 

106 `lang` : string 

107 The symbol language. Must be one of ``'isabelle'`` or 

108 ``'latex'``. The default is ``'isabelle'``. 

109 """ 

110 

111 latex_symbols = { 

112 '\\alpha' : '\U000003b1', 

113 '\\beta' : '\U000003b2', 

114 '\\gamma' : '\U000003b3', 

115 '\\delta' : '\U000003b4', 

116 '\\varepsilon' : '\U000003b5', 

117 '\\zeta' : '\U000003b6', 

118 '\\eta' : '\U000003b7', 

119 '\\vartheta' : '\U000003b8', 

120 '\\iota' : '\U000003b9', 

121 '\\kappa' : '\U000003ba', 

122 '\\lambda' : '\U000003bb', 

123 '\\mu' : '\U000003bc', 

124 '\\nu' : '\U000003bd', 

125 '\\xi' : '\U000003be', 

126 '\\pi' : '\U000003c0', 

127 '\\varrho' : '\U000003c1', 

128 '\\sigma' : '\U000003c3', 

129 '\\tau' : '\U000003c4', 

130 '\\upsilon' : '\U000003c5', 

131 '\\varphi' : '\U000003c6', 

132 '\\chi' : '\U000003c7', 

133 '\\psi' : '\U000003c8', 

134 '\\omega' : '\U000003c9', 

135 '\\Gamma' : '\U00000393', 

136 '\\Delta' : '\U00000394', 

137 '\\Theta' : '\U00000398', 

138 '\\Lambda' : '\U0000039b', 

139 '\\Xi' : '\U0000039e', 

140 '\\Pi' : '\U000003a0', 

141 '\\Sigma' : '\U000003a3', 

142 '\\Upsilon' : '\U000003a5', 

143 '\\Phi' : '\U000003a6', 

144 '\\Psi' : '\U000003a8', 

145 '\\Omega' : '\U000003a9', 

146 '\\leftarrow' : '\U00002190', 

147 '\\longleftarrow' : '\U000027f5', 

148 '\\rightarrow' : '\U00002192', 

149 '\\longrightarrow' : '\U000027f6', 

150 '\\Leftarrow' : '\U000021d0', 

151 '\\Longleftarrow' : '\U000027f8', 

152 '\\Rightarrow' : '\U000021d2', 

153 '\\Longrightarrow' : '\U000027f9', 

154 '\\leftrightarrow' : '\U00002194', 

155 '\\longleftrightarrow' : '\U000027f7', 

156 '\\Leftrightarrow' : '\U000021d4', 

157 '\\Longleftrightarrow' : '\U000027fa', 

158 '\\mapsto' : '\U000021a6', 

159 '\\longmapsto' : '\U000027fc', 

160 '\\relbar' : '\U00002500', 

161 '\\Relbar' : '\U00002550', 

162 '\\hookleftarrow' : '\U000021a9', 

163 '\\hookrightarrow' : '\U000021aa', 

164 '\\leftharpoondown' : '\U000021bd', 

165 '\\rightharpoondown' : '\U000021c1', 

166 '\\leftharpoonup' : '\U000021bc', 

167 '\\rightharpoonup' : '\U000021c0', 

168 '\\rightleftharpoons' : '\U000021cc', 

169 '\\leadsto' : '\U0000219d', 

170 '\\downharpoonleft' : '\U000021c3', 

171 '\\downharpoonright' : '\U000021c2', 

172 '\\upharpoonleft' : '\U000021bf', 

173 '\\upharpoonright' : '\U000021be', 

174 '\\restriction' : '\U000021be', 

175 '\\uparrow' : '\U00002191', 

176 '\\Uparrow' : '\U000021d1', 

177 '\\downarrow' : '\U00002193', 

178 '\\Downarrow' : '\U000021d3', 

179 '\\updownarrow' : '\U00002195', 

180 '\\Updownarrow' : '\U000021d5', 

181 '\\langle' : '\U000027e8', 

182 '\\rangle' : '\U000027e9', 

183 '\\lceil' : '\U00002308', 

184 '\\rceil' : '\U00002309', 

185 '\\lfloor' : '\U0000230a', 

186 '\\rfloor' : '\U0000230b', 

187 '\\flqq' : '\U000000ab', 

188 '\\frqq' : '\U000000bb', 

189 '\\bot' : '\U000022a5', 

190 '\\top' : '\U000022a4', 

191 '\\wedge' : '\U00002227', 

192 '\\bigwedge' : '\U000022c0', 

193 '\\vee' : '\U00002228', 

194 '\\bigvee' : '\U000022c1', 

195 '\\forall' : '\U00002200', 

196 '\\exists' : '\U00002203', 

197 '\\nexists' : '\U00002204', 

198 '\\neg' : '\U000000ac', 

199 '\\Box' : '\U000025a1', 

200 '\\Diamond' : '\U000025c7', 

201 '\\vdash' : '\U000022a2', 

202 '\\models' : '\U000022a8', 

203 '\\dashv' : '\U000022a3', 

204 '\\surd' : '\U0000221a', 

205 '\\le' : '\U00002264', 

206 '\\ge' : '\U00002265', 

207 '\\ll' : '\U0000226a', 

208 '\\gg' : '\U0000226b', 

209 '\\lesssim' : '\U00002272', 

210 '\\gtrsim' : '\U00002273', 

211 '\\lessapprox' : '\U00002a85', 

212 '\\gtrapprox' : '\U00002a86', 

213 '\\in' : '\U00002208', 

214 '\\notin' : '\U00002209', 

215 '\\subset' : '\U00002282', 

216 '\\supset' : '\U00002283', 

217 '\\subseteq' : '\U00002286', 

218 '\\supseteq' : '\U00002287', 

219 '\\sqsubset' : '\U0000228f', 

220 '\\sqsupset' : '\U00002290', 

221 '\\sqsubseteq' : '\U00002291', 

222 '\\sqsupseteq' : '\U00002292', 

223 '\\cap' : '\U00002229', 

224 '\\bigcap' : '\U000022c2', 

225 '\\cup' : '\U0000222a', 

226 '\\bigcup' : '\U000022c3', 

227 '\\sqcup' : '\U00002294', 

228 '\\bigsqcup' : '\U00002a06', 

229 '\\sqcap' : '\U00002293', 

230 '\\Bigsqcap' : '\U00002a05', 

231 '\\setminus' : '\U00002216', 

232 '\\propto' : '\U0000221d', 

233 '\\uplus' : '\U0000228e', 

234 '\\bigplus' : '\U00002a04', 

235 '\\sim' : '\U0000223c', 

236 '\\doteq' : '\U00002250', 

237 '\\simeq' : '\U00002243', 

238 '\\approx' : '\U00002248', 

239 '\\asymp' : '\U0000224d', 

240 '\\cong' : '\U00002245', 

241 '\\equiv' : '\U00002261', 

242 '\\Join' : '\U000022c8', 

243 '\\bowtie' : '\U00002a1d', 

244 '\\prec' : '\U0000227a', 

245 '\\succ' : '\U0000227b', 

246 '\\preceq' : '\U0000227c', 

247 '\\succeq' : '\U0000227d', 

248 '\\parallel' : '\U00002225', 

249 '\\mid' : '\U000000a6', 

250 '\\pm' : '\U000000b1', 

251 '\\mp' : '\U00002213', 

252 '\\times' : '\U000000d7', 

253 '\\div' : '\U000000f7', 

254 '\\cdot' : '\U000022c5', 

255 '\\star' : '\U000022c6', 

256 '\\circ' : '\U00002218', 

257 '\\dagger' : '\U00002020', 

258 '\\ddagger' : '\U00002021', 

259 '\\lhd' : '\U000022b2', 

260 '\\rhd' : '\U000022b3', 

261 '\\unlhd' : '\U000022b4', 

262 '\\unrhd' : '\U000022b5', 

263 '\\triangleleft' : '\U000025c3', 

264 '\\triangleright' : '\U000025b9', 

265 '\\triangle' : '\U000025b3', 

266 '\\triangleq' : '\U0000225c', 

267 '\\oplus' : '\U00002295', 

268 '\\bigoplus' : '\U00002a01', 

269 '\\otimes' : '\U00002297', 

270 '\\bigotimes' : '\U00002a02', 

271 '\\odot' : '\U00002299', 

272 '\\bigodot' : '\U00002a00', 

273 '\\ominus' : '\U00002296', 

274 '\\oslash' : '\U00002298', 

275 '\\dots' : '\U00002026', 

276 '\\cdots' : '\U000022ef', 

277 '\\sum' : '\U00002211', 

278 '\\prod' : '\U0000220f', 

279 '\\coprod' : '\U00002210', 

280 '\\infty' : '\U0000221e', 

281 '\\int' : '\U0000222b', 

282 '\\oint' : '\U0000222e', 

283 '\\clubsuit' : '\U00002663', 

284 '\\diamondsuit' : '\U00002662', 

285 '\\heartsuit' : '\U00002661', 

286 '\\spadesuit' : '\U00002660', 

287 '\\aleph' : '\U00002135', 

288 '\\emptyset' : '\U00002205', 

289 '\\nabla' : '\U00002207', 

290 '\\partial' : '\U00002202', 

291 '\\flat' : '\U0000266d', 

292 '\\natural' : '\U0000266e', 

293 '\\sharp' : '\U0000266f', 

294 '\\angle' : '\U00002220', 

295 '\\copyright' : '\U000000a9', 

296 '\\textregistered' : '\U000000ae', 

297 '\\textonequarter' : '\U000000bc', 

298 '\\textonehalf' : '\U000000bd', 

299 '\\textthreequarters' : '\U000000be', 

300 '\\textordfeminine' : '\U000000aa', 

301 '\\textordmasculine' : '\U000000ba', 

302 '\\euro' : '\U000020ac', 

303 '\\pounds' : '\U000000a3', 

304 '\\yen' : '\U000000a5', 

305 '\\textcent' : '\U000000a2', 

306 '\\textcurrency' : '\U000000a4', 

307 '\\textdegree' : '\U000000b0', 

308 } 

309 

310 isabelle_symbols = { 

311 '\\<zero>' : '\U0001d7ec', 

312 '\\<one>' : '\U0001d7ed', 

313 '\\<two>' : '\U0001d7ee', 

314 '\\<three>' : '\U0001d7ef', 

315 '\\<four>' : '\U0001d7f0', 

316 '\\<five>' : '\U0001d7f1', 

317 '\\<six>' : '\U0001d7f2', 

318 '\\<seven>' : '\U0001d7f3', 

319 '\\<eight>' : '\U0001d7f4', 

320 '\\<nine>' : '\U0001d7f5', 

321 '\\<A>' : '\U0001d49c', 

322 '\\<B>' : '\U0000212c', 

323 '\\<C>' : '\U0001d49e', 

324 '\\<D>' : '\U0001d49f', 

325 '\\<E>' : '\U00002130', 

326 '\\<F>' : '\U00002131', 

327 '\\<G>' : '\U0001d4a2', 

328 '\\<H>' : '\U0000210b', 

329 '\\<I>' : '\U00002110', 

330 '\\<J>' : '\U0001d4a5', 

331 '\\<K>' : '\U0001d4a6', 

332 '\\<L>' : '\U00002112', 

333 '\\<M>' : '\U00002133', 

334 '\\<N>' : '\U0001d4a9', 

335 '\\<O>' : '\U0001d4aa', 

336 '\\<P>' : '\U0001d4ab', 

337 '\\<Q>' : '\U0001d4ac', 

338 '\\<R>' : '\U0000211b', 

339 '\\<S>' : '\U0001d4ae', 

340 '\\<T>' : '\U0001d4af', 

341 '\\<U>' : '\U0001d4b0', 

342 '\\<V>' : '\U0001d4b1', 

343 '\\<W>' : '\U0001d4b2', 

344 '\\<X>' : '\U0001d4b3', 

345 '\\<Y>' : '\U0001d4b4', 

346 '\\<Z>' : '\U0001d4b5', 

347 '\\<a>' : '\U0001d5ba', 

348 '\\<b>' : '\U0001d5bb', 

349 '\\<c>' : '\U0001d5bc', 

350 '\\<d>' : '\U0001d5bd', 

351 '\\<e>' : '\U0001d5be', 

352 '\\<f>' : '\U0001d5bf', 

353 '\\<g>' : '\U0001d5c0', 

354 '\\<h>' : '\U0001d5c1', 

355 '\\<i>' : '\U0001d5c2', 

356 '\\<j>' : '\U0001d5c3', 

357 '\\<k>' : '\U0001d5c4', 

358 '\\<l>' : '\U0001d5c5', 

359 '\\<m>' : '\U0001d5c6', 

360 '\\<n>' : '\U0001d5c7', 

361 '\\<o>' : '\U0001d5c8', 

362 '\\<p>' : '\U0001d5c9', 

363 '\\<q>' : '\U0001d5ca', 

364 '\\<r>' : '\U0001d5cb', 

365 '\\<s>' : '\U0001d5cc', 

366 '\\<t>' : '\U0001d5cd', 

367 '\\<u>' : '\U0001d5ce', 

368 '\\<v>' : '\U0001d5cf', 

369 '\\<w>' : '\U0001d5d0', 

370 '\\<x>' : '\U0001d5d1', 

371 '\\<y>' : '\U0001d5d2', 

372 '\\<z>' : '\U0001d5d3', 

373 '\\<AA>' : '\U0001d504', 

374 '\\<BB>' : '\U0001d505', 

375 '\\<CC>' : '\U0000212d', 

376 '\\<DD>' : '\U0001d507', 

377 '\\<EE>' : '\U0001d508', 

378 '\\<FF>' : '\U0001d509', 

379 '\\<GG>' : '\U0001d50a', 

380 '\\<HH>' : '\U0000210c', 

381 '\\<II>' : '\U00002111', 

382 '\\<JJ>' : '\U0001d50d', 

383 '\\<KK>' : '\U0001d50e', 

384 '\\<LL>' : '\U0001d50f', 

385 '\\<MM>' : '\U0001d510', 

386 '\\<NN>' : '\U0001d511', 

387 '\\<OO>' : '\U0001d512', 

388 '\\<PP>' : '\U0001d513', 

389 '\\<QQ>' : '\U0001d514', 

390 '\\<RR>' : '\U0000211c', 

391 '\\<SS>' : '\U0001d516', 

392 '\\<TT>' : '\U0001d517', 

393 '\\<UU>' : '\U0001d518', 

394 '\\<VV>' : '\U0001d519', 

395 '\\<WW>' : '\U0001d51a', 

396 '\\<XX>' : '\U0001d51b', 

397 '\\<YY>' : '\U0001d51c', 

398 '\\<ZZ>' : '\U00002128', 

399 '\\<aa>' : '\U0001d51e', 

400 '\\<bb>' : '\U0001d51f', 

401 '\\<cc>' : '\U0001d520', 

402 '\\<dd>' : '\U0001d521', 

403 '\\<ee>' : '\U0001d522', 

404 '\\<ff>' : '\U0001d523', 

405 '\\<gg>' : '\U0001d524', 

406 '\\<hh>' : '\U0001d525', 

407 '\\<ii>' : '\U0001d526', 

408 '\\<jj>' : '\U0001d527', 

409 '\\<kk>' : '\U0001d528', 

410 '\\<ll>' : '\U0001d529', 

411 '\\<mm>' : '\U0001d52a', 

412 '\\<nn>' : '\U0001d52b', 

413 '\\<oo>' : '\U0001d52c', 

414 '\\<pp>' : '\U0001d52d', 

415 '\\<qq>' : '\U0001d52e', 

416 '\\<rr>' : '\U0001d52f', 

417 '\\<ss>' : '\U0001d530', 

418 '\\<tt>' : '\U0001d531', 

419 '\\<uu>' : '\U0001d532', 

420 '\\<vv>' : '\U0001d533', 

421 '\\<ww>' : '\U0001d534', 

422 '\\<xx>' : '\U0001d535', 

423 '\\<yy>' : '\U0001d536', 

424 '\\<zz>' : '\U0001d537', 

425 '\\<alpha>' : '\U000003b1', 

426 '\\<beta>' : '\U000003b2', 

427 '\\<gamma>' : '\U000003b3', 

428 '\\<delta>' : '\U000003b4', 

429 '\\<epsilon>' : '\U000003b5', 

430 '\\<zeta>' : '\U000003b6', 

431 '\\<eta>' : '\U000003b7', 

432 '\\<theta>' : '\U000003b8', 

433 '\\<iota>' : '\U000003b9', 

434 '\\<kappa>' : '\U000003ba', 

435 '\\<lambda>' : '\U000003bb', 

436 '\\<mu>' : '\U000003bc', 

437 '\\<nu>' : '\U000003bd', 

438 '\\<xi>' : '\U000003be', 

439 '\\<pi>' : '\U000003c0', 

440 '\\<rho>' : '\U000003c1', 

441 '\\<sigma>' : '\U000003c3', 

442 '\\<tau>' : '\U000003c4', 

443 '\\<upsilon>' : '\U000003c5', 

444 '\\<phi>' : '\U000003c6', 

445 '\\<chi>' : '\U000003c7', 

446 '\\<psi>' : '\U000003c8', 

447 '\\<omega>' : '\U000003c9', 

448 '\\<Gamma>' : '\U00000393', 

449 '\\<Delta>' : '\U00000394', 

450 '\\<Theta>' : '\U00000398', 

451 '\\<Lambda>' : '\U0000039b', 

452 '\\<Xi>' : '\U0000039e', 

453 '\\<Pi>' : '\U000003a0', 

454 '\\<Sigma>' : '\U000003a3', 

455 '\\<Upsilon>' : '\U000003a5', 

456 '\\<Phi>' : '\U000003a6', 

457 '\\<Psi>' : '\U000003a8', 

458 '\\<Omega>' : '\U000003a9', 

459 '\\<bool>' : '\U0001d539', 

460 '\\<complex>' : '\U00002102', 

461 '\\<nat>' : '\U00002115', 

462 '\\<rat>' : '\U0000211a', 

463 '\\<real>' : '\U0000211d', 

464 '\\<int>' : '\U00002124', 

465 '\\<leftarrow>' : '\U00002190', 

466 '\\<longleftarrow>' : '\U000027f5', 

467 '\\<rightarrow>' : '\U00002192', 

468 '\\<longrightarrow>' : '\U000027f6', 

469 '\\<Leftarrow>' : '\U000021d0', 

470 '\\<Longleftarrow>' : '\U000027f8', 

471 '\\<Rightarrow>' : '\U000021d2', 

472 '\\<Longrightarrow>' : '\U000027f9', 

473 '\\<leftrightarrow>' : '\U00002194', 

474 '\\<longleftrightarrow>' : '\U000027f7', 

475 '\\<Leftrightarrow>' : '\U000021d4', 

476 '\\<Longleftrightarrow>' : '\U000027fa', 

477 '\\<mapsto>' : '\U000021a6', 

478 '\\<longmapsto>' : '\U000027fc', 

479 '\\<midarrow>' : '\U00002500', 

480 '\\<Midarrow>' : '\U00002550', 

481 '\\<hookleftarrow>' : '\U000021a9', 

482 '\\<hookrightarrow>' : '\U000021aa', 

483 '\\<leftharpoondown>' : '\U000021bd', 

484 '\\<rightharpoondown>' : '\U000021c1', 

485 '\\<leftharpoonup>' : '\U000021bc', 

486 '\\<rightharpoonup>' : '\U000021c0', 

487 '\\<rightleftharpoons>' : '\U000021cc', 

488 '\\<leadsto>' : '\U0000219d', 

489 '\\<downharpoonleft>' : '\U000021c3', 

490 '\\<downharpoonright>' : '\U000021c2', 

491 '\\<upharpoonleft>' : '\U000021bf', 

492 '\\<upharpoonright>' : '\U000021be', 

493 '\\<restriction>' : '\U000021be', 

494 '\\<Colon>' : '\U00002237', 

495 '\\<up>' : '\U00002191', 

496 '\\<Up>' : '\U000021d1', 

497 '\\<down>' : '\U00002193', 

498 '\\<Down>' : '\U000021d3', 

499 '\\<updown>' : '\U00002195', 

500 '\\<Updown>' : '\U000021d5', 

501 '\\<langle>' : '\U000027e8', 

502 '\\<rangle>' : '\U000027e9', 

503 '\\<lceil>' : '\U00002308', 

504 '\\<rceil>' : '\U00002309', 

505 '\\<lfloor>' : '\U0000230a', 

506 '\\<rfloor>' : '\U0000230b', 

507 '\\<lparr>' : '\U00002987', 

508 '\\<rparr>' : '\U00002988', 

509 '\\<lbrakk>' : '\U000027e6', 

510 '\\<rbrakk>' : '\U000027e7', 

511 '\\<lbrace>' : '\U00002983', 

512 '\\<rbrace>' : '\U00002984', 

513 '\\<guillemotleft>' : '\U000000ab', 

514 '\\<guillemotright>' : '\U000000bb', 

515 '\\<bottom>' : '\U000022a5', 

516 '\\<top>' : '\U000022a4', 

517 '\\<and>' : '\U00002227', 

518 '\\<And>' : '\U000022c0', 

519 '\\<or>' : '\U00002228', 

520 '\\<Or>' : '\U000022c1', 

521 '\\<forall>' : '\U00002200', 

522 '\\<exists>' : '\U00002203', 

523 '\\<nexists>' : '\U00002204', 

524 '\\<not>' : '\U000000ac', 

525 '\\<box>' : '\U000025a1', 

526 '\\<diamond>' : '\U000025c7', 

527 '\\<turnstile>' : '\U000022a2', 

528 '\\<Turnstile>' : '\U000022a8', 

529 '\\<tturnstile>' : '\U000022a9', 

530 '\\<TTurnstile>' : '\U000022ab', 

531 '\\<stileturn>' : '\U000022a3', 

532 '\\<surd>' : '\U0000221a', 

533 '\\<le>' : '\U00002264', 

534 '\\<ge>' : '\U00002265', 

535 '\\<lless>' : '\U0000226a', 

536 '\\<ggreater>' : '\U0000226b', 

537 '\\<lesssim>' : '\U00002272', 

538 '\\<greatersim>' : '\U00002273', 

539 '\\<lessapprox>' : '\U00002a85', 

540 '\\<greaterapprox>' : '\U00002a86', 

541 '\\<in>' : '\U00002208', 

542 '\\<notin>' : '\U00002209', 

543 '\\<subset>' : '\U00002282', 

544 '\\<supset>' : '\U00002283', 

545 '\\<subseteq>' : '\U00002286', 

546 '\\<supseteq>' : '\U00002287', 

547 '\\<sqsubset>' : '\U0000228f', 

548 '\\<sqsupset>' : '\U00002290', 

549 '\\<sqsubseteq>' : '\U00002291', 

550 '\\<sqsupseteq>' : '\U00002292', 

551 '\\<inter>' : '\U00002229', 

552 '\\<Inter>' : '\U000022c2', 

553 '\\<union>' : '\U0000222a', 

554 '\\<Union>' : '\U000022c3', 

555 '\\<squnion>' : '\U00002294', 

556 '\\<Squnion>' : '\U00002a06', 

557 '\\<sqinter>' : '\U00002293', 

558 '\\<Sqinter>' : '\U00002a05', 

559 '\\<setminus>' : '\U00002216', 

560 '\\<propto>' : '\U0000221d', 

561 '\\<uplus>' : '\U0000228e', 

562 '\\<Uplus>' : '\U00002a04', 

563 '\\<noteq>' : '\U00002260', 

564 '\\<sim>' : '\U0000223c', 

565 '\\<doteq>' : '\U00002250', 

566 '\\<simeq>' : '\U00002243', 

567 '\\<approx>' : '\U00002248', 

568 '\\<asymp>' : '\U0000224d', 

569 '\\<cong>' : '\U00002245', 

570 '\\<smile>' : '\U00002323', 

571 '\\<equiv>' : '\U00002261', 

572 '\\<frown>' : '\U00002322', 

573 '\\<Join>' : '\U000022c8', 

574 '\\<bowtie>' : '\U00002a1d', 

575 '\\<prec>' : '\U0000227a', 

576 '\\<succ>' : '\U0000227b', 

577 '\\<preceq>' : '\U0000227c', 

578 '\\<succeq>' : '\U0000227d', 

579 '\\<parallel>' : '\U00002225', 

580 '\\<bar>' : '\U000000a6', 

581 '\\<plusminus>' : '\U000000b1', 

582 '\\<minusplus>' : '\U00002213', 

583 '\\<times>' : '\U000000d7', 

584 '\\<div>' : '\U000000f7', 

585 '\\<cdot>' : '\U000022c5', 

586 '\\<star>' : '\U000022c6', 

587 '\\<bullet>' : '\U00002219', 

588 '\\<circ>' : '\U00002218', 

589 '\\<dagger>' : '\U00002020', 

590 '\\<ddagger>' : '\U00002021', 

591 '\\<lhd>' : '\U000022b2', 

592 '\\<rhd>' : '\U000022b3', 

593 '\\<unlhd>' : '\U000022b4', 

594 '\\<unrhd>' : '\U000022b5', 

595 '\\<triangleleft>' : '\U000025c3', 

596 '\\<triangleright>' : '\U000025b9', 

597 '\\<triangle>' : '\U000025b3', 

598 '\\<triangleq>' : '\U0000225c', 

599 '\\<oplus>' : '\U00002295', 

600 '\\<Oplus>' : '\U00002a01', 

601 '\\<otimes>' : '\U00002297', 

602 '\\<Otimes>' : '\U00002a02', 

603 '\\<odot>' : '\U00002299', 

604 '\\<Odot>' : '\U00002a00', 

605 '\\<ominus>' : '\U00002296', 

606 '\\<oslash>' : '\U00002298', 

607 '\\<dots>' : '\U00002026', 

608 '\\<cdots>' : '\U000022ef', 

609 '\\<Sum>' : '\U00002211', 

610 '\\<Prod>' : '\U0000220f', 

611 '\\<Coprod>' : '\U00002210', 

612 '\\<infinity>' : '\U0000221e', 

613 '\\<integral>' : '\U0000222b', 

614 '\\<ointegral>' : '\U0000222e', 

615 '\\<clubsuit>' : '\U00002663', 

616 '\\<diamondsuit>' : '\U00002662', 

617 '\\<heartsuit>' : '\U00002661', 

618 '\\<spadesuit>' : '\U00002660', 

619 '\\<aleph>' : '\U00002135', 

620 '\\<emptyset>' : '\U00002205', 

621 '\\<nabla>' : '\U00002207', 

622 '\\<partial>' : '\U00002202', 

623 '\\<flat>' : '\U0000266d', 

624 '\\<natural>' : '\U0000266e', 

625 '\\<sharp>' : '\U0000266f', 

626 '\\<angle>' : '\U00002220', 

627 '\\<copyright>' : '\U000000a9', 

628 '\\<registered>' : '\U000000ae', 

629 '\\<hyphen>' : '\U000000ad', 

630 '\\<inverse>' : '\U000000af', 

631 '\\<onequarter>' : '\U000000bc', 

632 '\\<onehalf>' : '\U000000bd', 

633 '\\<threequarters>' : '\U000000be', 

634 '\\<ordfeminine>' : '\U000000aa', 

635 '\\<ordmasculine>' : '\U000000ba', 

636 '\\<section>' : '\U000000a7', 

637 '\\<paragraph>' : '\U000000b6', 

638 '\\<exclamdown>' : '\U000000a1', 

639 '\\<questiondown>' : '\U000000bf', 

640 '\\<euro>' : '\U000020ac', 

641 '\\<pounds>' : '\U000000a3', 

642 '\\<yen>' : '\U000000a5', 

643 '\\<cent>' : '\U000000a2', 

644 '\\<currency>' : '\U000000a4', 

645 '\\<degree>' : '\U000000b0', 

646 '\\<amalg>' : '\U00002a3f', 

647 '\\<mho>' : '\U00002127', 

648 '\\<lozenge>' : '\U000025ca', 

649 '\\<wp>' : '\U00002118', 

650 '\\<wrong>' : '\U00002240', 

651 '\\<struct>' : '\U000022c4', 

652 '\\<acute>' : '\U000000b4', 

653 '\\<index>' : '\U00000131', 

654 '\\<dieresis>' : '\U000000a8', 

655 '\\<cedilla>' : '\U000000b8', 

656 '\\<hungarumlaut>' : '\U000002dd', 

657 '\\<some>' : '\U000003f5', 

658 '\\<newline>' : '\U000023ce', 

659 '\\<open>' : '\U00002039', 

660 '\\<close>' : '\U0000203a', 

661 '\\<here>' : '\U00002302', 

662 '\\<^sub>' : '\U000021e9', 

663 '\\<^sup>' : '\U000021e7', 

664 '\\<^bold>' : '\U00002759', 

665 '\\<^bsub>' : '\U000021d8', 

666 '\\<^esub>' : '\U000021d9', 

667 '\\<^bsup>' : '\U000021d7', 

668 '\\<^esup>' : '\U000021d6', 

669 } 

670 

671 lang_map = {'isabelle' : isabelle_symbols, 'latex' : latex_symbols} 

672 

673 def __init__(self, **options): 

674 Filter.__init__(self, **options) 

675 lang = get_choice_opt(options, 'lang', 

676 ['isabelle', 'latex'], 'isabelle') 

677 self.symbols = self.lang_map[lang] 

678 

679 def filter(self, lexer, stream): 

680 for ttype, value in stream: 

681 if value in self.symbols: 

682 yield ttype, self.symbols[value] 

683 else: 

684 yield ttype, value 

685 

686 

687class KeywordCaseFilter(Filter): 

688 """Convert keywords to lowercase or uppercase or capitalize them, which 

689 means first letter uppercase, rest lowercase. 

690 

691 This can be useful e.g. if you highlight Pascal code and want to adapt the 

692 code to your styleguide. 

693 

694 Options accepted: 

695 

696 `case` : string 

697 The casing to convert keywords to. Must be one of ``'lower'``, 

698 ``'upper'`` or ``'capitalize'``. The default is ``'lower'``. 

699 """ 

700 

701 def __init__(self, **options): 

702 Filter.__init__(self, **options) 

703 case = get_choice_opt(options, 'case', 

704 ['lower', 'upper', 'capitalize'], 'lower') 

705 self.convert = getattr(str, case) 

706 

707 def filter(self, lexer, stream): 

708 for ttype, value in stream: 

709 if ttype in Keyword: 

710 yield ttype, self.convert(value) 

711 else: 

712 yield ttype, value 

713 

714 

715class NameHighlightFilter(Filter): 

716 """Highlight a normal Name (and Name.*) token with a different token type. 

717 

718 Example:: 

719 

720 filter = NameHighlightFilter( 

721 names=['foo', 'bar', 'baz'], 

722 tokentype=Name.Function, 

723 ) 

724 

725 This would highlight the names "foo", "bar" and "baz" 

726 as functions. `Name.Function` is the default token type. 

727 

728 Options accepted: 

729 

730 `names` : list of strings 

731 A list of names that should be given the different token type. 

732 There is no default. 

733 `tokentype` : TokenType or string 

734 A token type or a string containing a token type name that is 

735 used for highlighting the strings in `names`. The default is 

736 `Name.Function`. 

737 """ 

738 

739 def __init__(self, **options): 

740 Filter.__init__(self, **options) 

741 self.names = set(get_list_opt(options, 'names', [])) 

742 tokentype = options.get('tokentype') 

743 if tokentype: 

744 self.tokentype = string_to_tokentype(tokentype) 

745 else: 

746 self.tokentype = Name.Function 

747 

748 def filter(self, lexer, stream): 

749 for ttype, value in stream: 

750 if ttype in Name and value in self.names: 

751 yield self.tokentype, value 

752 else: 

753 yield ttype, value 

754 

755 

756class ErrorToken(Exception): 

757 pass 

758 

759 

760class RaiseOnErrorTokenFilter(Filter): 

761 """Raise an exception when the lexer generates an error token. 

762 

763 Options accepted: 

764 

765 `excclass` : Exception class 

766 The exception class to raise. 

767 The default is `pygments.filters.ErrorToken`. 

768 

769 .. versionadded:: 0.8 

770 """ 

771 

772 def __init__(self, **options): 

773 Filter.__init__(self, **options) 

774 self.exception = options.get('excclass', ErrorToken) 

775 try: 

776 # issubclass() will raise TypeError if first argument is not a class 

777 if not issubclass(self.exception, Exception): 

778 raise TypeError 

779 except TypeError: 

780 raise OptionError('excclass option is not an exception class') 

781 

782 def filter(self, lexer, stream): 

783 for ttype, value in stream: 

784 if ttype is Error: 

785 raise self.exception(value) 

786 yield ttype, value 

787 

788 

789class VisibleWhitespaceFilter(Filter): 

790 """Convert tabs, newlines and/or spaces to visible characters. 

791 

792 Options accepted: 

793 

794 `spaces` : string or bool 

795 If this is a one-character string, spaces will be replaces by this string. 

796 If it is another true value, spaces will be replaced by ``·`` (unicode 

797 MIDDLE DOT). If it is a false value, spaces will not be replaced. The 

798 default is ``False``. 

799 `tabs` : string or bool 

800 The same as for `spaces`, but the default replacement character is ``»`` 

801 (unicode RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK). The default value 

802 is ``False``. Note: this will not work if the `tabsize` option for the 

803 lexer is nonzero, as tabs will already have been expanded then. 

804 `tabsize` : int 

805 If tabs are to be replaced by this filter (see the `tabs` option), this 

806 is the total number of characters that a tab should be expanded to. 

807 The default is ``8``. 

808 `newlines` : string or bool 

809 The same as for `spaces`, but the default replacement character is ``¶`` 

810 (unicode PILCROW SIGN). The default value is ``False``. 

811 `wstokentype` : bool 

812 If true, give whitespace the special `Whitespace` token type. This allows 

813 styling the visible whitespace differently (e.g. greyed out), but it can 

814 disrupt background colors. The default is ``True``. 

815 

816 .. versionadded:: 0.8 

817 """ 

818 

819 def __init__(self, **options): 

820 Filter.__init__(self, **options) 

821 for name, default in [('spaces', '·'), 

822 ('tabs', '»'), 

823 ('newlines', '¶')]: 

824 opt = options.get(name, False) 

825 if isinstance(opt, str) and len(opt) == 1: 

826 setattr(self, name, opt) 

827 else: 

828 setattr(self, name, (opt and default or '')) 

829 tabsize = get_int_opt(options, 'tabsize', 8) 

830 if self.tabs: 

831 self.tabs += ' ' * (tabsize - 1) 

832 if self.newlines: 

833 self.newlines += '\n' 

834 self.wstt = get_bool_opt(options, 'wstokentype', True) 

835 

836 def filter(self, lexer, stream): 

837 if self.wstt: 

838 spaces = self.spaces or ' ' 

839 tabs = self.tabs or '\t' 

840 newlines = self.newlines or '\n' 

841 regex = re.compile(r'\s') 

842 

843 def replacefunc(wschar): 

844 if wschar == ' ': 

845 return spaces 

846 elif wschar == '\t': 

847 return tabs 

848 elif wschar == '\n': 

849 return newlines 

850 return wschar 

851 

852 for ttype, value in stream: 

853 yield from _replace_special(ttype, value, regex, Whitespace, 

854 replacefunc) 

855 else: 

856 spaces, tabs, newlines = self.spaces, self.tabs, self.newlines 

857 # simpler processing 

858 for ttype, value in stream: 

859 if spaces: 

860 value = value.replace(' ', spaces) 

861 if tabs: 

862 value = value.replace('\t', tabs) 

863 if newlines: 

864 value = value.replace('\n', newlines) 

865 yield ttype, value 

866 

867 

868class GobbleFilter(Filter): 

869 """Gobbles source code lines (eats initial characters). 

870 

871 This filter drops the first ``n`` characters off every line of code. This 

872 may be useful when the source code fed to the lexer is indented by a fixed 

873 amount of space that isn't desired in the output. 

874 

875 Options accepted: 

876 

877 `n` : int 

878 The number of characters to gobble. 

879 

880 .. versionadded:: 1.2 

881 """ 

882 def __init__(self, **options): 

883 Filter.__init__(self, **options) 

884 self.n = get_int_opt(options, 'n', 0) 

885 

886 def gobble(self, value, left): 

887 if left < len(value): 

888 return value[left:], 0 

889 else: 

890 return '', left - len(value) 

891 

892 def filter(self, lexer, stream): 

893 n = self.n 

894 left = n # How many characters left to gobble. 

895 for ttype, value in stream: 

896 # Remove ``left`` tokens from first line, ``n`` from all others. 

897 parts = value.split('\n') 

898 (parts[0], left) = self.gobble(parts[0], left) 

899 for i in range(1, len(parts)): 

900 (parts[i], left) = self.gobble(parts[i], n) 

901 value = '\n'.join(parts) 

902 

903 if value != '': 

904 yield ttype, value 

905 

906 

907class TokenMergeFilter(Filter): 

908 """Merges consecutive tokens with the same token type in the output 

909 stream of a lexer. 

910 

911 .. versionadded:: 1.2 

912 """ 

913 def __init__(self, **options): 

914 Filter.__init__(self, **options) 

915 

916 def filter(self, lexer, stream): 

917 current_type = None 

918 current_value = None 

919 for ttype, value in stream: 

920 if ttype is current_type: 

921 current_value += value 

922 else: 

923 if current_type is not None: 

924 yield current_type, current_value 

925 current_type = ttype 

926 current_value = value 

927 if current_type is not None: 

928 yield current_type, current_value 

929 

930 

931FILTERS = { 

932 'codetagify': CodeTagFilter, 

933 'keywordcase': KeywordCaseFilter, 

934 'highlight': NameHighlightFilter, 

935 'raiseonerror': RaiseOnErrorTokenFilter, 

936 'whitespace': VisibleWhitespaceFilter, 

937 'gobble': GobbleFilter, 

938 'tokenmerge': TokenMergeFilter, 

939 'symbols': SymbolFilter, 

940}