ref: 2446153f98e51926fdc9db85f8f183b85dc419e2
parent: 6e083c9b3ae767d6a3c8eddef96faf3f68b0c578
author: Bryan Bishop <[email protected]>
date: Thu Apr 26 07:19:34 EDT 2012
break up the for loop in textpre.py into separate functions
--- a/textpre.py
+++ b/textpre.py
@@ -265,43 +265,38 @@
"9": 0xFF
}
-for l in sys.stdin:
- # skip lines with no quotes
- if "\"" not in l:
- sys.stdout.write(l)
- continue
+def separate_comment(l):
+ """ Separates asm and comments on a single line.
+ """
- asm = ""
+ asm = ""
+ comment = None
+ in_quotes = False
+ in_comment = False
- # strip comments
- comment = None
- if ";" in l:
- in_quotes = False
- in_comment = False
- for letter in l:
- if in_comment:
- comment += letter
- elif in_quotes and letter != "\"":
- asm += letter
- elif in_quotes and letter == "\"":
- in_quotes = False
- asm += letter
- elif not in_quotes and letter == "\"":
- in_quotes = True
- asm += letter
- elif not in_quotes and letter != "\"":
- if letter == ";":
- in_comment = True
- comment = ";"
- else:
- asm += letter
- else:
- asm = l
+ # token either belongs to the line or to the comment
+ for token in l:
+ if in_comment:
+ comment += token
+ elif in_quotes and token != "\"":
+ asm += token
+ elif in_quotes and token == "\"":
+ in_quotes = False
+ asm += token
+ elif not in_quotes and token == "\"":
+ in_quotes = True
+ asm += token
+ elif not in_quotes and token != "\"":
+ if token == ";":
+ in_comment = True
+ comment = ";"
+ else:
+ asm += token
+ return asm, comment
- # skip asm with no quotes
- if "\"" not in asm:
- sys.stdout.write(l)
- continue
+def quote_translator(asm):
+ """ Writes asm with quoted text translated into bytes.
+ """
# split by quotes
asms = asm.split("\"")
@@ -311,16 +306,16 @@
if "section" in lowasm \
or "include" in lowasm \
or "incbin" in lowasm:
- sys.stdout.write(l)
- continue
+ sys.stdout.write(asm)
+ return
even = False
i = 0
for token in asms:
i = i + 1
+
if even:
# token is a string to convert to byte values
-
while len(token):
# read a single UTF-8 codepoint
char = token[0]
@@ -358,10 +353,27 @@
if len(token):
sys.stdout.write(", ")
-
+ # if not even
else:
sys.stdout.write(token)
+
even = not even
+ return
+for l in sys.stdin:
+ # strip and store any comment on this line
+ if ";" in l:
+ asm, comment = separate_comment(l)
+ else:
+ asm = l
+ comment = None
+
+ # convert text to bytes when a quote appears (not in a comment)
+ if "\"" in asm:
+ quote_translator(asm)
+ else:
+ sys.stdout.write(asm)
+
+ # show line comment
if comment != None:
sys.stdout.write(comment)