mirror of https://github.com/pret/pokecrystal.git
Merge pull request #566 from luckytyphlosion/master
Refactor .gitattributes and .gitignore
This commit is contained in:
commit
c323f9ddd1
|
@ -1,11 +1,34 @@
|
|||
# No monkey business with line endings
|
||||
* -text
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text eol=lf
|
||||
|
||||
# hexdump binary files
|
||||
*.png binary diff=hex
|
||||
*.lz binary diff=hex
|
||||
# Explicitly declare text files you want to always be normalized and converted
|
||||
# to native line endings on checkout.
|
||||
|
||||
# files part of the build
|
||||
*.asm text
|
||||
*.pal text
|
||||
*.link text
|
||||
*.txt text
|
||||
|
||||
# extra files
|
||||
*.awk text
|
||||
*.c text
|
||||
*.h text
|
||||
*.md text
|
||||
*.py text
|
||||
*.sh text
|
||||
*.sha1 text
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.png binary diff=hex
|
||||
*.lz.* binary diff=hex
|
||||
*.bin binary diff=hex
|
||||
*.blk binary diff=hex
|
||||
*.rle binary diff=hex
|
||||
*.attrmap binary diff=hex
|
||||
*.tilemap binary diff=hex
|
||||
|
||||
# these are generated but just in case
|
||||
*.lz binary diff=hex
|
||||
*.2bpp binary diff=hex
|
||||
*.1bpp binary diff=hex
|
||||
*.bin binary diff=hex
|
||||
*.blk binary diff=hex
|
||||
|
||||
*.1bpp binary diff=hex
|
|
@ -17,6 +17,7 @@
|
|||
*.sgm
|
||||
*.sav
|
||||
*.rtc
|
||||
*.sn*
|
||||
|
||||
# rgbds extras
|
||||
*.map
|
||||
|
@ -39,8 +40,8 @@ pokecrystal.txt
|
|||
*.2bpp
|
||||
*.1bpp
|
||||
*.lz
|
||||
*.pal
|
||||
*.animated.tilemap
|
||||
gfx/pokemon/*/bitmask.asm
|
||||
gfx/pokemon/*/frames.asm
|
||||
!gfx/pokemon/*/shiny.pal
|
||||
!gfx/pokemon/unown/bitmask.asm
|
||||
!gfx/pokemon/unown/frames.asm
|
8
Makefile
8
Makefile
|
@ -33,7 +33,7 @@ crystal11_obj := $(crystal_obj:.o=11.o)
|
|||
### Build targets
|
||||
|
||||
.SUFFIXES:
|
||||
.PHONY: all crystal crystal11 clean compare tools
|
||||
.PHONY: all crystal crystal11 clean compare tools tidy
|
||||
.SECONDEXPANSION:
|
||||
.PRECIOUS:
|
||||
.SECONDARY:
|
||||
|
@ -43,6 +43,12 @@ crystal: pokecrystal.gbc
|
|||
crystal11: pokecrystal11.gbc
|
||||
|
||||
clean:
|
||||
rm -f $(roms) $(crystal_obj) $(crystal11_obj) $(roms:.gbc=.map) $(roms:.gbc=.sym)
|
||||
find gfx \( -name "*.[12]bpp" -o -name "*.lz" -o -name "*.gbcpal" \) -delete
|
||||
find gfx/pokemon -mindepth 1 ! -path "gfx/pokemon/unown/*" \( -name "bitmask.asm" -o -name "frames.asm" -o -name "front.animated.tilemap" -o -name "front.dimensions" \) -delete
|
||||
$(MAKE) clean -C tools/
|
||||
|
||||
tidy:
|
||||
rm -f $(roms) $(crystal_obj) $(crystal11_obj) $(roms:.gbc=.map) $(roms:.gbc=.sym)
|
||||
$(MAKE) clean -C tools/
|
||||
|
||||
|
|
178
tools/toc.py
178
tools/toc.py
|
@ -1,89 +1,89 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python3 toc.py [-n] files.md...
|
||||
Replace a "## TOC" heading in a Markdown file with a table of contents,
|
||||
generated from the other headings in the file. Supports multiple files.
|
||||
Headings must start with "##" signs to be detected.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
from collections import namedtuple
|
||||
|
||||
toc_name = 'Contents'
|
||||
valid_toc_headings = {'## TOC', '##TOC'}
|
||||
|
||||
TocItem = namedtuple('TocItem', ['name', 'anchor', 'level'])
|
||||
punctuation_regexp = re.compile(r'[^\w\- ]+')
|
||||
|
||||
def name_to_anchor(name):
|
||||
# GitHub's algorithm for generating anchors from headings
|
||||
# https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb
|
||||
anchor = name.strip().lower() # lowercase
|
||||
anchor = re.sub(punctuation_regexp, '', anchor) # remove punctuation
|
||||
anchor = anchor.replace(' ', '-') # replace spaces with dash
|
||||
return anchor
|
||||
|
||||
def get_toc_index(lines):
|
||||
toc_index = None
|
||||
for i, line in enumerate(lines):
|
||||
if line.rstrip() in valid_toc_headings:
|
||||
toc_index = i
|
||||
break
|
||||
return toc_index
|
||||
|
||||
def get_toc_items(lines, toc_index):
|
||||
for i, line in enumerate(lines):
|
||||
if i <= toc_index:
|
||||
continue
|
||||
if line.startswith('##'):
|
||||
name = line.lstrip('#')
|
||||
level = len(line) - len(name) - len('##')
|
||||
name = name.strip()
|
||||
anchor = name_to_anchor(name)
|
||||
yield TocItem(name, anchor, level)
|
||||
|
||||
def toc_string(toc_items):
|
||||
lines = ['## %s' % toc_name, '']
|
||||
for name, anchor, level in toc_items:
|
||||
padding = ' ' * level
|
||||
line = '%s- [%s](#%s)' % (padding, name, anchor)
|
||||
lines.append(line)
|
||||
return '\n'.join(lines) + '\n'
|
||||
|
||||
def add_toc(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
toc_index = get_toc_index(lines)
|
||||
if toc_index is None:
|
||||
return None # no TOC heading
|
||||
toc_items = list(get_toc_items(lines, toc_index))
|
||||
if not toc_items:
|
||||
return False # no content headings
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
for i, line in enumerate(lines):
|
||||
if i == toc_index:
|
||||
f.write(toc_string(toc_items))
|
||||
else:
|
||||
f.write(line)
|
||||
return True # OK
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print('*** ERROR: No filenames specified')
|
||||
print(__doc__)
|
||||
exit(1)
|
||||
for filename in sys.argv[1:]:
|
||||
print(filename)
|
||||
result = add_toc(filename)
|
||||
if result is None:
|
||||
print('*** WARNING: No "## TOC" heading found')
|
||||
elif result is False:
|
||||
print('*** WARNING: No content headings found')
|
||||
else:
|
||||
print('OK')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python3 toc.py [-n] files.md...
|
||||
Replace a "## TOC" heading in a Markdown file with a table of contents,
|
||||
generated from the other headings in the file. Supports multiple files.
|
||||
Headings must start with "##" signs to be detected.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
from collections import namedtuple
|
||||
|
||||
toc_name = 'Contents'
|
||||
valid_toc_headings = {'## TOC', '##TOC'}
|
||||
|
||||
TocItem = namedtuple('TocItem', ['name', 'anchor', 'level'])
|
||||
punctuation_regexp = re.compile(r'[^\w\- ]+')
|
||||
|
||||
def name_to_anchor(name):
|
||||
# GitHub's algorithm for generating anchors from headings
|
||||
# https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb
|
||||
anchor = name.strip().lower() # lowercase
|
||||
anchor = re.sub(punctuation_regexp, '', anchor) # remove punctuation
|
||||
anchor = anchor.replace(' ', '-') # replace spaces with dash
|
||||
return anchor
|
||||
|
||||
def get_toc_index(lines):
|
||||
toc_index = None
|
||||
for i, line in enumerate(lines):
|
||||
if line.rstrip() in valid_toc_headings:
|
||||
toc_index = i
|
||||
break
|
||||
return toc_index
|
||||
|
||||
def get_toc_items(lines, toc_index):
|
||||
for i, line in enumerate(lines):
|
||||
if i <= toc_index:
|
||||
continue
|
||||
if line.startswith('##'):
|
||||
name = line.lstrip('#')
|
||||
level = len(line) - len(name) - len('##')
|
||||
name = name.strip()
|
||||
anchor = name_to_anchor(name)
|
||||
yield TocItem(name, anchor, level)
|
||||
|
||||
def toc_string(toc_items):
|
||||
lines = ['## %s' % toc_name, '']
|
||||
for name, anchor, level in toc_items:
|
||||
padding = ' ' * level
|
||||
line = '%s- [%s](#%s)' % (padding, name, anchor)
|
||||
lines.append(line)
|
||||
return '\n'.join(lines) + '\n'
|
||||
|
||||
def add_toc(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
toc_index = get_toc_index(lines)
|
||||
if toc_index is None:
|
||||
return None # no TOC heading
|
||||
toc_items = list(get_toc_items(lines, toc_index))
|
||||
if not toc_items:
|
||||
return False # no content headings
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
for i, line in enumerate(lines):
|
||||
if i == toc_index:
|
||||
f.write(toc_string(toc_items))
|
||||
else:
|
||||
f.write(line)
|
||||
return True # OK
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print('*** ERROR: No filenames specified')
|
||||
print(__doc__)
|
||||
exit(1)
|
||||
for filename in sys.argv[1:]:
|
||||
print(filename)
|
||||
result = add_toc(filename)
|
||||
if result is None:
|
||||
print('*** WARNING: No "## TOC" heading found')
|
||||
elif result is False:
|
||||
print('*** WARNING: No content headings found')
|
||||
else:
|
||||
print('OK')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
Loading…
Reference in New Issue