"""A lexical analyzer class for simple shell-like syntaxes."""
# Module and documentation by Eric S. Raymond, 21 Dec 1998
# Input stacking and error message cleanup added by ESR, March 2000
# push_source() and pop_source() made explicit by ESR, January 2001.
# Posix compliance, split(), string arguments, and
# iterator interface by Gustavo Niemeyer, April 2003.
# changes to tokenize more like Posix shells by Vinay Sajip, July 2016.
import os
import re
import sys
from collections import deque
from io import StringIO
__all__ = ["shlex", "split", "quote"]
class shlex:
"A lexical analyzer class for simple shell-like syntaxes."
def __init__(self, instream=None, infile=None, posix=False,
punctuation_chars=False):
if isinstance(instream, str):
instream = StringIO(instream)
if instream is not None:
self.instream = instream
self.infile = infile
else:
self.instream = sys.stdin
self.infile = None
self.posix = posix
if posix:
self.eof = None
else:
self.eof = ''
self.commenters = '#'
self.wordchars = ('abcdfeghijklmnopqrstuvwxyz'
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
if self.posix:
self.wordchars += ('ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ')
self.whitespace = ' \t\r\n'
self.whitespace_split = False
self.quotes = '\'"'
self.escape = '\\'
self.escapedquotes = '"'
self.state = ' '
self.pushback = deque()
self.lineno = 1
self.debug = 0
self.token = ''
self.filestack = deque()
self.source = None
if not punctuation_chars:
punctuation_chars = ''
elif punctuation_chars is True:
punctuation_chars = '();<>|&'
self.punctuation_chars = punctuation_chars
if punctuation_chars:
# _pushback_chars is a push back queue used by lookahead logic
self._pushback_chars = deque()
# these chars added because allowed in file names, args, wildcards
self.wordchars += '~-./*?='
#remove any punctuation chars from wordchars
t = self.wordchars.maketrans(dict.fromkeys(punctuation_chars))
self.wordchars = self.wordchars.translate(t)
def push_token(self, tok):
"Push a token onto the stack popped by the get_token method"
if self.debug >= 1:
print("shlex: pushing token " + repr(tok))
self.pushback.appendleft(tok)
def push_source(self, newstream, newfile=None):
"Push an input source onto the lexer's input source stack."
if isinstance(newstream, str):
newstream = StringIO(newstream)
self.filestack.appendleft((self.infile, self.instream, self.lineno))
self.infile = newfile
self.instream = newstream
self.lineno = 1
if self.debug:
if newfile is not None:
print('shlex: pushing to file %s' % (self.infile,))
else:
print('shlex: pushing to stream %s' % (self.instream,))
def pop_source(self):
"Pop the input source stack."
self.instream.close()
(self.infile, self.instream, self.lineno) = self.filestack.popleft()
if self.debug:
print('shlex: popping to %s, line %d' \
% (self.instream, self.lineno))
self.state = ' '
def get_token(self):
"Get a token from the input stream (or from stack if it's nonempty)"
if self.pushback:
tok = self.pushback.popleft()
if self.debug >= 1:
print("shlex: popping token " + repr(tok))
return tok
# No pushback. Get a token.
raw = self.read_token()
# Handle inclusions
if self.source is not None:
while raw == self.source:
spec = self.sourcehook(self.read_token())
if spec:
(newfile, newstream) = spec
self.push_source(newstream, newfile)
raw = self.get_token()
# Maybe we got EOF instead?
while raw == self.eof:
if not self.filestack:
return self.eof
else:
self.pop_source()
raw = self.get_token()
# Neither inclusion nor EOF
if self.debug >= 1:
if raw != self.eof:
print("shlex: token=" + repr(raw))
else:
print("shlex: token=EOF")
return raw
def read_token(self):
quoted = False
escapedstate = ' '
while True:
if self.punctuation_chars and self._pushback_chars:
nextchar = self._pushback_chars.pop()
else:
nextchar = self.instream.read(1)
if nextchar == '\n':
self.lineno += 1
if self.debug >= 3:
print("shlex: in state %r I see character: %r" % (self.state,
nextchar))
if self.state is None:
self.token = '' # past end of file
break
elif self.state == ' ':
if not nextchar:
self.state = None # end of file
break
elif nextchar in self.whitespace:
if self.debug >= 2:
print("shlex: I see whitespace in whitespace state")
if self.token or (self.posix and quoted):
break # emit current token
else:
continue
elif nextchar in self.commenters:
self.instream.readline()
self.lineno += 1
elif self.posix and nextchar in self.escape:
escapedstate = 'a'
self.state = nextchar
elif nextchar in self.wordchars:
self.token = nextchar
self.state = 'a'
elif nextchar in self.punctuation_chars:
self.token = nextchar
self.state = 'c'
elif nextchar in self.quotes:
if not self.posix:
self.token = nextchar
self.state = nextchar
elif self.whitespace_split:
self.token = nextchar
self.state = 'a'
else:
self.token = nextchar
if self.token or (self.posix and quoted):
break # emit current token
else:
continue
elif self.state in self.quotes:
quoted = True
if not nextchar: # end of file
if self.debug >= 2:
print("shlex: I see EOF in quotes state")
# XXX what error should be raised here?
raise ValueError("No closing quotation")
if nextchar == self.state:
if not self.posix:
self.token += nextchar
self.state = ' '
break
else:
self.state = 'a'
elif (self.posix and nextchar in self.escape and self.state
in self.escapedquotes):
escapedstate = self.state
self.state = nextchar
else:
self.token += nextchar
elif self.state in self.escape:
if not nextchar: # end of file
if self.debug >= 2:
print("shlex: I see EOF in escape state")
# XXX what error should be raised here?
raise ValueError("No escaped character")
# In posix shells, only the quote itself or the escape
# character may be escaped within quotes.
if (escapedstate in self.quotes and
nextchar != self.state and nextchar != escapedstate):
self.token += self.state
self.token += nextchar
self.state = escapedstate
elif self.state in ('a', 'c'):
if not nextchar:
self.state = None # end of file
break
elif nextchar in self.whitespace:
if self.debug >= 2:
print("shlex: I see whitespace in word state")
self.state = ' '
if self.token or (self.posix and quoted):
break # emit current token
else:
continue
elif nextchar in self.commenters:
self.instream.readline()
self.lineno += 1
if self.posix:
self.state = ' '
if self.token or (self.posix and quoted):
break # emit current token
else:
continue
elif self.state == 'c':
if nextchar in self.punctuation_chars:
self.token += nextchar
else:
if nextchar not in self.whitespace:
self._pushback_chars.append(nextchar)
self.state = ' '
break
elif self.posix and nextchar in self.quotes:
self.state = nextchar
elif self.posix and nextchar in self.escape:
escapedstate = 'a'
self.state = nextchar
elif (nextchar in self.wordchars or nextchar in self.quotes
or self.whitespace_split):
self.token += nextchar
else:
if self.punctuation_chars:
self._pushback_chars.append(nextchar)
else:
self.pushback.appendleft(nextchar)
if self.debug >= 2:
print("shlex: I see punctuation in word state")
self.state = ' '
if self.token or (self.posix and quoted):
break # emit current token
else:
continue
result = self.token
self.token = ''
if self.posix and not quoted and result == '':
result = None
if self.debug > 1:
if result:
print("shlex: raw token=" + repr(result))
else:
print("shlex: raw token=EOF")
return result
def sourcehook(self, newfile):
"Hook called on a filename to be sourced."
if newfile[0] == '"':
newfile = newfile[1:-1]
# This implements cpp-like semantics for relative-path inclusion.
if isinstance(self.infile, str) and not os.path.isabs(newfile):
newfile = os.path.join(os.path.dirname(self.infile), newfile)
return (newfile, open(newfile, "r"))
def error_leader(self, infile=None, lineno=None):
"Emit a C-compiler-like, Emacs-friendly error-message leader."
if infile is None:
infile = self.infile
if lineno is None:
lineno = self.lineno
return "\"%s\", line %d: " % (infile, lineno)
def __iter__(self):
return self
def __next__(self):
token = self.get_token()
if token == self.eof:
raise StopIteration
return token
def split(s, comments=False, posix=True):
lex = shlex(s, posix=posix)
lex.whitespace_split = True
if not comments:
lex.commenters = ''
return list(lex)
_find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search
def quote(s):
"""Return a shell-escaped version of the string *s*."""
if not s:
return "''"
if _find_unsafe(s) is None:
return s
# use single quotes, and put single quotes into double quotes
# the string $'b is then quoted as '$'"'"'b'
return "'" + s.replace("'", "'\"'\"'") + "'"
def _print_tokens(lexer):
while 1:
tt = lexer.get_token()
if not tt:
break
print("Token: " + repr(tt))
if __name__ == '__main__':
if len(sys.argv) == 1:
_print_tokens(shlex())
else:
fn = sys.argv[1]
with open(fn) as f:
_print_tokens(shlex(f, fn))
Modern Day Pin Up Magazine features Pin Ups from around the world, articles, tutorials and small businesses that promote the vintage stye! Submissions are always open for anything Pin Up related. We are always looking for Retro inspired articles and small businesses to feature. www.moderndaypinupmagazine.com http://www.moderndaypinupmagazine.com
Hey, Sugar! My name is Billie Jayne DeVille. I was born and raised a Georgia Peach but I now
call South Carolina my home. I'm a full-time artist/pinstriper and a total sucker for whitewall
tires and big tailfins! When I'm not painting, you can find me cruising in my 53 Chevy, my 55
Cadillac, my 63 T-bird or in the shop getting down and dirty with my 58 Plymouth restoration project! I am also co-owner of Deville Magazine, a quarterly kustom kulture publication available in both print and digital!
cabaret dancer at LUCKY LADY CABARET, internet chat model for myfreecams, published Easy riders centerfold and spokesmodel, Gold avenger for superheroinecentral.com, catfightcentral.com, always looking for cool photographers to shoot with...
Magazines include
Leg Show, Leg Sex, Leg Action, Easyriders motorcycle magazine, Busty Beauties, Gent
Titles include
Miss Easyriders (voted centerfold of the year for Easyriders)
Miss Nude Midwest
Miss Nude Northeast
Voted club favorite awarded by Exotic Dancers Publications
Television appearances
Ricki Lake - Life of a Dancer
Jerry Springer - Lesbian Love Triangle
Websites
Cosplay - The Gold Avenger for superheroinecentral.com
Catfight - catfightcentral.com/clips4sale.com
Our Mission: To empower women to peruse their dreams with style and class.
Full Bio
Bay City Bombshells (BCB) is a group for women that love the pin-up/vintage/retro/rockabilly lifestyle, the fashion and look, or aspire to learn more about living a vintage lifestyle. Here we are able to share what makes us a bombshell, and share tips and tricks with each other.
Lyndah Pizarro is reality TV personality with a love for all things Pin Up. Lyndah is globally syndicated thanks to her starring role on the hit TV show Operation Repo. Well know for being aired all across the globe and in numerous countries, Lyndah then took her notoriety to different areas where she found much success such as starting her own clothing link known as Pink Pizza, starting her own skin care line known as Lyndah face and make up known as Lyndah Beauty. Lyndah decided to then take a shot at modeling. After trying different genres if modeling, she finally landed where she was always meant to land, in the Pin up world. Since her first photo shoot as a pin up model with Girlie Show photography, Lyndah has been published twice in RetroLovely Magazine and can also be found in Pin Up Kulture Magazine. Then in 2020, Lyndah found herself in her very first international publication with BombShell Magazine.
The Pin Ups & Pumps TN chapter empowers women through the art of pinup, blending vintage style with a passion for community outreach and volunteer work across Southeast Tennessee. We celebrate the charm of classic fashion and car culture while making a meaningful impact in our community!
I was born in Indiana but moved to Tennessee in my late teens. My mother introduced me to Marilyn Monroe at a very young age and I have been enamored with everything pin-up, vintage, and retro ever since. I started pin-up modeling in 2019 with my best friend and photographer Pamela Claytor. I have been very lucky to be a part of her vision and have her expertise along the way. I have been published 7 times so far and have 5 more publications coming up!
The Golden Exposure Inked Aug 2020 - RetroLovely Scrapbook Vol 10 - RetroLovely Heavy Ink No.5 - RetroLovely Taboo No. 34 - RetroLovely Hot Rods Special Edition Vol 1 - Bombshell October 2020 Book 1 - RetroMan Magazine Issue 3 Tiki Special Edition
I am a portrait photographer, a mother, a wife, a chocoholic and most importantly a woman. I started my portrait studio with the desire to empower women and celebrate all the many things we can be. There is no age limit, no size limit and no weight limit in my studio. Furthermore, there is ZERO judgement.
Full Bio
I am a portrait photographer, a mother, a wife, a chocoholic and most importantly a woman. I started my portrait studio with the desire to empower women and celebrate all the many things we can be. There is no age limit, no size limit and no weight limit in my studio. Furthermore, there is ZERO judgement.
As a woman, our thoughts are often triggered by our emotions. Let’s play with that for a moment. Close your eyes and imagine for a moment that you have no limitations… what would that feel like? How would you dream of being photographed? Allow me to make that thought come true for you and capture beautiful images that you will cherish forever.
You deserve it. Come celebrate all your inner moments!
Born and raised in California. Many summer evenings of my childhood could be found in the garage handing my dad a wrench or holding a flashlight. The smells of exhaust and motor oil bring back those happy memories, because of that, I can often be found at car shows. Most of my time is occupied with wrangling my two rambunctious young sons but when I have some free time I like to create. Whether that’s from either side of a lens, leaning over a craft table or dabbling away on a design, my mind is always thinking up a new creation.