diff --git a/armarium_app/app.db b/armarium_app/app.db new file mode 100644 index 0000000..03f9b82 Binary files /dev/null and b/armarium_app/app.db differ diff --git a/armarium_app/app/__init__.py b/armarium_app/app/__init__.py new file mode 100644 index 0000000..4d0246b --- /dev/null +++ b/armarium_app/app/__init__.py @@ -0,0 +1,11 @@ +from flask import Flask +from flask.ext.sqlalchemy import SQLAlchemy + + +app = Flask(__name__) + +app.config.from_object('config') +#config file still has original WTF CSRF and secret key values...need to changes +db = SQLAlchemy(app) + +from app import views, models diff --git a/armarium_app/app/data_parse_and_load.py b/armarium_app/app/data_parse_and_load.py new file mode 100644 index 0000000..a64177e --- /dev/null +++ b/armarium_app/app/data_parse_and_load.py @@ -0,0 +1,928 @@ +#load necessary libraries +import json, re, csv, os +from urllib import urlopen +from bs4 import BeautifulSoup + +relpath = os.path.dirname(__file__) + +#get existing manuscript data in JSON format +sourcefile = os.path.join(relpath, 'trial_II160119.json') +sourceobj = open(sourcefile) +sourcedict = json.load(sourceobj) +sourceobj.close() + +#get reference dictionaries for country, language, association codes +countryObj = open(os.path.join(relpath, 'loccountrycodes.json')) +langObj = open(os.path.join(relpath,'loclangcodes.json')) +relObj = open(os.path.join(relpath,'locrelcodes.json')) +countryCodesDict = json.load(countryObj) +countryCodesInverted = {countryCodesDict[key]: key for key in countryCodesDict} +langCodesDict = json.load(langObj) +relCodesDict = json.load(relObj) +regionList = ['Northern', 'Southern', 'Central', 'Eastern', 'Western'] +numerals = {'I': 1, 'II': 2, 'III': 3, 'IV': 4, 'V': 5, 'VI': 6, 'VII': 7, 'VIII': 8, 'IX': 9, 'X': 10} + + +placeCache = {} +#store places here after call to server; prevent unnecessary multiple calls + +################################################## +#API keys for external services +#geonames +key_geonames = 'jtshed_geo2015' + +################################################## +#define regular expressions for extracting data +lines = r'([0-9\-]*) [A-Za-z]* *lines' +linepat = re.compile(lines) + +ruling = r'(([Ff]rame[- ]?)?[Rr]ul(ed|ing)) in ([A-Za-z ]+)[.:,;]' +rulingpat= re.compile(ruling) + +scripts = r' in a?n? ?([\S ]+?)(script|hand)[s,.]? ' #add semicolon and period to final set? +#Need to join with \S+ pattern below to catch non-ASCII characters +scriptpat = re.compile(scripts) +#above seems to be working for most cases as of 1/22 1429 + +scripts2 = r'in( a|an)* (\S+ )+script' +scriptpat2= re.compile(scripts2) + +watermarkstring = r'Briquet|[Ww]atermark' +waterpat = re.compile(watermarkstring) + +briquetstring = r'Briquet,? ([\'\"]?[\S ]*?[,\'\"]*) ?([0-9-]+)[;:).]*' +briqpat = re.compile(briquetstring) + +#This one used below for splitting contents; do not cull +subfieldstring = r'\|[A-Za-z0-9]' +subfieldpat = re.compile(subfieldstring) +#just gets the flag itself + +#replace with ' ' +subfieldstring2 = r'(^|\|[A-Za-z0-9])([A-Za-z0-9 ]+)[,.]' +subfieldpat2 = re.compile(subfieldstring2) + +subfieldstring3 = r'(\|[a-z0-9]{1})([\S ]+?)[,.]' +subfieldpat3 = re.compile(subfieldstring3) + +subfieldstring4 = r'(\|[a-z0-9]{1})([\S ]+?)(?=[,.|])' +#non-consuming lookahead - gets flag and content up to next flag +subfieldpat4 = re.compile(subfieldstring4) + +#get register of quires +quires = '([0-9-]+ ?[\u2070\u00B9\u00B2\u00B3\u2074\u2075\u2076\u2077\u2078\u2079\u207B\u207A]+)+ ?' +quirepat = re.compile(quires) +#quire2pat from notebook + +#get publisher from field 260 +pubstring = r'(?<=\|b).+?(?=[.,])' +pubpatt = re.compile(pubstring) + +subflagpatt = re.compile(r'\|[a-z]') +#recognizes any letter subfield flag (e.g. "|c") + +sfpat = re.compile(r'[Ss]ecundo [Ff]olio') +#finds phrase "secundo folio" +aflagpatt = re.compile(r'(?<=\|a).+$') +#finds flag "a" to end of string: for extracting secundo folio + +volspatt = re.compile(r'(?<=\|a)([0-9]) v\. \(([0-9]+), ([0-9]+) ?([a-z]*)') +#finds number of volumes in field 300, if more than 1, and extents of volumes + +folpatt = re.compile(r'[Ff]ol. ([0-9xvi])* ?(\(.*?\) )?\+? ?[0-9]+ ?(\(.*?\) ?)?\+? ?([0-9xvi])* ?(\(.*?\))?') +#finds layout of MS from 500/AMREMM 'Collation' field + +##Regular expressions for decomposing field 300, physical description +mat_subfieldstring = r'(\|[a-z0-9]{1})([\S ]+?)(?=[.|;]|$)' +#non-consuming lookahead +mat_subfieldpat = re.compile(mat_subfieldstring) + +#gets dims of supporting material (.groups()[0] = height, [1]= width) +supportdimstring = r'^([0-9]*) x ([0-9]*)' +supportdimpat = re.compile(supportdimstring) +#gets dims of written area, and units (.groups()[0] = height, [1] = width, [2] = units) +writtendimstring = r'\( ?([0-9]*)[x ]+([0-9]* ?)\) ([A-Za-z]{2})' +writtendimpat = re.compile(writtendimstring) +#gets dims of bound area (.groups()[0] = height,[1]=width) +bounddimstring = r'bound to ([0-9]*) x ([0-9]*)' +bounddimpat = re.compile(bounddimstring) +endunitstring = r'([a-z]*)\.?$' +endunitpat = re.compile(endunitstring) +## + +motifpatt = re.compile(r'Motif: ([\S ]*?)[|\n]') +#finds name of pattern on Briquet Online website page for individual watermark +#of the type http://www.ksbm.oeaw.ac.at/_scripts/php/loadRepWmark.php?rep=briquet&refnr=>&lang=fr' + +##patterns for identifying types of dates, used in get_person_dates function for fields 100, 600, 700 +onedate = re.compile(r'(?P[0-9]+)\??') +twodate = re.compile(r'(?Pca\. ?)?(?P[0-9]+)\??-(?Pca\. ?)?(?P[0-9]+)\??') +centurypat = re.compile('[0-9]+(?=th)') +## + +##patterns for extracting contents from 505 field +#for identifying folio markers +contentsstring = r'[Ff]ol\. ?[0-9IVXLivxlvrab -]*' +contentspat = re.compile(contentsstring) + +#for finding and eliminating leading punctuation +beginstring = r'^ ?[:.)\]] ?' +beginpat = re.compile(beginstring) + +#for finding and eliminating trailing punctuation +endstring = r';?[ -]*$' +endpat = re.compile(endstring) + +#for eliminating trailing numbers at end +trailingnumstring = r' [0-9]{1,2}\. ?$' +trailnumpat = re.compile(trailingnumstring) +## + +######################################################## +#field-specific processing functions +def getStructuredData(field008): + returnDict = {} + #takes field 008 and returns dict with dates, date type, country, and language + + returnDict['datetype'] = field008[6] + + if 'uu' not in field008[7:11]: + returnDict['date1'] = int(field008[7:11]) + else: + returnDict['date1'] = int(field008[7:9] + '00') + + if 'uu' in field008[11:15]: + returnDict['date2'] = int(field008[11:13] + '00') + elif field008[11:15] == ' ': + returnDict['date2'] = None + else: + returnDict['date2'] = int(field008[11:15]) + + + #return country if there, else return none (to be added to list) + if field008[15:18].strip() != 'xx': + returnDict['country'] = countryCodesDict[field008[15:18].strip()] + else: + returnDict['country'] = None + returnDict['language'] = langCodesDict[field008[35:38].strip()] + + return returnDict + +def getPlace(field260, country): + #gets location information from field 260, comparing to country from field 008 + #returns dict with additional locations and publisher, if in 260 + returnDict = {'places': []} + + place = field260.strip('[]').split('|')[0].strip('?,[]]: ') + + if place == '': + return None + if len(re.split('[,[\]()?]+', place)) == 1: + if (place.split(' ')[0] in regionList) and (place.split(' ')[1] == country): + #ignore if this is the same as in field 008 + #discards a more specific region (e.g. "Western...") of a country + pass + elif ' and ' in place: + #evaluate multiple countries in "and" clause + for segment in place.split(' and '): + if segment.strip('?,[]]: ') == country: + #discard if it's the same as assigned country + pass + elif segment.strip('?,[]]: ') in countryCodesInverted: + placeItem = {'name': segment.strip('?,[]]: '), 'type':'country'} + placeCoords = get_coords(placeItem['name']) + placeItem['lat'] = placeCoords['lat'] + placeItem['lon'] = placeCoords['lon'] + returnDict['places'].append(placeItem) + elif (' or ') in place: + #evaluate multiple countries in "or" clause + for segment in place.split(' or '): + if segment.strip('?,[]]: ') == country: + #discard if it's the same as assigned country + pass + elif segment.strip('?,[]]: ') in countryCodesInverted: + placeItem = {'name': segment.strip('?,[]]: '), 'type':'country'} + placeCoords = get_coords(placeItem['name']) + placeItem['lat'] = placeCoords['lat'] + placeItem['lon'] = placeCoords['lon'] + returnDict['places'].append(placeItem) + + + elif ((place not in countryCodesInverted) and (re.search('[Ss]\.[Ll]', place) == None)): + placeItem = {'name': place, 'type':'area'} + placeCoords = get_coords(placeItem['name']) + placeItem['lat'] = placeCoords['lat'] + placeItem['lon'] = placeCoords['lon'] + returnDict['places'].append(placeItem) + else: + for segment in re.split('[,[\]()?]+', place): + if ( + (segment.strip() != '') and + (segment.strip() != country) and + (re.search('[Ss]\.[Ll]', segment) == None) and + (re.search('[0-9]{4}', segment) == None) and + (segment.strip() not in countryCodesInverted) + ): + + placeItem = {'name': segment.strip('?,[]]: '), 'type':'area'} + placeCoords = get_coords(placeItem['name']) + placeItem['lat'] = placeCoords['lat'] + placeItem['lon'] = placeCoords['lon'] + returnDict['places'].append(placeItem) + + return returnDict + +def get_coords(placename): + ###LIVE SERVER CALL + #Sends place name from record to Geonames API, retrieves latitude and longitude + + namequery = 'http://api.geonames.org/searchJSON?q=' + placename + '&maxRows=10&username=' + key_geonames + print 'Call to server' + try: + + namerecords = urlopen(namequery).read().decode("utf-8") + responsedict = json.loads(namerecords) + #GeoNames brings up "New England" as first request for "England", so substitute 'United Kingdom' + if placename == 'England': + return {'lat': responsedict['geonames'][1]['lat'], 'lon': responsedict['geonames'][1]['lng']} + else: + return {'lat': responsedict['geonames'][0]['lat'], 'lon': responsedict['geonames'][0]['lng']} + except: + print 'Call to server failed' + + return {'lat': None, 'lon': None} + +def getTitles(titleField, titleType): + #takes title fields and returns cleaned up titles with appropriate values + if titleType == '245': + #main title + return ('title', re.sub(r'\|[a-z]', ' ', titleField)) + if titleType == '246': + #variant title or secundo folio + if sfpat.search(titleField): + #secundo folio + return ('title_sec_folio', aflagpatt.search(titleField).group()) + else: + #other variant + return('title_var', re.sub(r'\|[a-z]', ' ', titleField)) + if titleType == '240': + #uniform title + return('title_uni', re.sub(r'\|[a-z]', ' ', titleField)) + + +def getDimensions(dimString): +#function to extract dimensions from standard-format 300|c subfield + #print('getting dimensions') + returnDict = {} + + if supportdimpat.search(dimString): + support = supportdimpat.search(dimString) + returnDict['supportHeight'] = support.groups()[0] + returnDict['supportWidth'] = support.groups()[1] + else: + returnDict['supportHeight'] = None + returnDict['supportWidth'] = None + + if writtendimpat.search(dimString): + written = writtendimpat.search(dimString) + returnDict['writtenHeight'] = written.groups()[0] + returnDict['writtenWidth'] = written.groups()[1] + returnDict['units'] = written.groups()[2] + else: + returnDict['writtenHeight'] = None + returnDict['writtenWidth'] = None + returnDict['units'] = None + + if bounddimpat.search(dimString): + bound = bounddimpat.search(dimString) + returnDict['boundHeight'] = bound.groups()[0] + returnDict['boundWidth'] = bound.groups()[1] + else: + returnDict['boundHeight'] = None + returnDict['boundWidth'] = None + + #appends units from end if there is not already a unit specified + #may be worth revising this to see what's better + if endunitpat.search(dimString): + if returnDict['units'] == None: + endunits = endunitpat.search(dimString) + returnDict['units'] = endunits.groups()[0] + + #print(returnDict) + return returnDict + +def getPhysDesc(field300): + #takes a ***string*** of field 300; returns dict of volumes, extent, dimensions, material + #returns None if the field is for microfilm + + firstFlag = subfieldpat4.search(field300).groups() + if firstFlag[0] == '|3': + if re.search('[Cc]opy', firstFlag[1]): + #immediately return None if not original + return None + else: + pass + + returnDict = {'volumeInfo': []} + materials = None + #get number of volumes; get extents of each from field formatted "2 v. (xxx, xxx)" + if volspatt.search(field300): + vols = volspatt.search(field300) + #print(vols.groups()) + numVols = int(vols.group(1)) + returnDict['volumes'] = numVols + #iterate over match groups to get extents of volumes + for x in range(2, numVols+2): + #print(int(vols.group(x))) + #whole "extent" dictionary gets appended to instantiate "volume info" -- other non-"extent" info added later + #this covers "extent" for multi-volume MSS + holderDict = {'extent': int(vols.group(x)), 'extentUnit': vols.group(4)} + returnDict['volumeInfo'].append(holderDict) + else: + returnDict['volumes'] = 1 + returnDict['volumeInfo'].append({}) + + + splitfields = mat_subfieldpat.findall(field300) + #divide field into subfield flag, value tuples + for subfield in splitfields: + #if there is an extent subfield that hasn't already been harvested by volspatt, get it + if (subfield[0] == '|a') and (returnDict['volumes'] ==1): + #this covers "extent" for single-volume MSS + #print 'a' + #print('proposed extent: ', subfield[1].split(' ')[0].strip(':,;.[] ')) + #print('proposed extent unit: ', subfield[1].split(' ')[1].strip(' :,;[]')) + if len(returnDict['volumeInfo']) == 0: + holderDict = {'extent': int(subfield[1].split(' ')[0].strip(':,;.[] ')), 'extentUnit': subfield[1].split(' ')[1].strip(' :,;[]')} + #returnDict['volumeInfo'].append({'extent': int(subfield[1].strip(' :,;'))}) + returnDict['volumeInfo'].append(holderDict) + else: + returnDict['volumeInfo'][0]['extent'] = int(subfield[1].split(' ')[0].strip(':,;.[] ')) + returnDict['volumeInfo'][0]['extentUnit'] = subfield[1].split(' ')[1].strip(' :,;[]') + #find support + elif subfield[0] == '|b': + #print 'b' + returnDict['support'] = subfield[1].strip(' :,;') + #try to retrieve dimensions, assign to each volume; + #set all to "none" if unable to retrieve + elif subfield[0] == '|c': + #print 'c' + dimensions = subfield[1] + + #print(returnDict['volumeInfo']) + + for codex in returnDict['volumeInfo']: + #iterate over 'volumeInfo' dicts of volume-specific information + #get dimensions + #check for missing extent and add if necessary + try: + dimensionDict = getDimensions(dimensions) + for item in dimensionDict: + codex[item] = dimensionDict[item] + #returnDict[item] = dimensionDict[item] + except: + print('weird error with dimensions') + codex['supportHeight'] = None + codex['supportWidth'] = None + codex['boundHeight'] = None + codex['boundWidth'] = None + codex['writtenHeight'] = None + codex['writtenWidth'] = None + codex['units'] = None + + + #extent + if 'extent' not in codex: + extSegment = field300.split('|')[0].strip(' :,;') + try: + codex['extent'] = int(extSegment.split(' ')[0]) + codex['extentUnit'] = extSegment.split(' ')[1] + except: + print 'Failed to get extent' + codex['extent'] = None + codex['extentUnit'] = None + + if 'support' not in returnDict: + returnDict['support'] = None + + if re.search('\|c', field300) == None: + #couldn't find subfield flag for dimensions; set to none to avoid key error + #need to iterate over volumes to ensure proper placement in dictionary + #replace later with more granular search/replacement if possible + for codex in returnDict['volumeInfo']: + codex['supportHeight'] = None + codex['supportWidth'] = None + codex['boundHeight'] = None + codex['boundWidth'] = None + codex['writtenHeight'] = None + codex['writtenWidth'] = None + codex['units'] = None + + + + #if (field300[:2] != '|3') and len(returnDict['volumeInfo'])==0:#('extent' not in returnDict['volumeInfo'][0]): + #no materials specified and no "a" subfield flag: try to get extent from first segment + # extSegment = field300.split('|')[0].strip(' :,;') + + + # holderDict = {'extent': int(extSegment.split(' ')[0]), 'extentUnit': extSegment.split(' ')[1]} + # returnDict['volumeInfo'].append(holderDict) + # except: + # pass + #print(returnDict) + return returnDict + +#def getLayout(field500Layout): + #take MARC AMREMM 500 "layout" + #return numbers of lines and ruling materials + + +def getWaterMarks(field500Coll): +#takes 500 Collation field, returns list of tuples (Briquet number - Briquet name - URL: +#refers to defs splitnumbers, getBriq (both immediately below) + + + #print('getting watermarks') + if briqpat.search(field500Coll): + #if there are watermarks, create list and get all of them + watermarknums = [] + wms = briqpat.findall(field500Coll) + + for wm in wms: + #iterate over watermarks, split if necessary and append to list + if wm[1] !='': + #wm[1] is the number + for output_num in splitnumbers(wm[1]): + #LIVE CALL TO REMOTE SERVER!!! + retrievedInfo = getBriq(output_num) + watermarknums.append((int(output_num), retrievedInfo[0], retrievedInfo[1])) + return watermarknums + + else: + return None + + +def splitnumbers(input_num): +#Takes a number, determines if it's a range, and returns all constituent numbers, +#correcting for abbreviations in watermark listings + if '-' in input_num: + multiples = input_num.split('-') + if len(multiples[1])0: + returnDict['date1'] = int(cents[0] + '00') + returnDict['datetype'] = 'century' + if len(cents) == 2: + returnDict['date2'] = int(cents[1] + '00') + return returnDict + + #check for range of dates + twodates = twodate.search(datestring) + if twodates != None: + #get dates + returnDict['date1'] = int(twodates.group('date1')) + returnDict['date2'] = int(twodates.group('date2')) + #assign date type; check for markers of approximation + if ((twodate.search(datestring).group('ca1')) + or (twodate.search(datestring).group('ca2')) + or re.search('[Aa]pprox(imately)?', datestring) + or re.search(' or ', datestring) + or ('?' in datestring)): + returnDict['datetype'] = 'approx' + #check for markers of professional dates + elif re.search('[Aa]ctive', datestring) or re.search('^[Ff]l\.', datestring): + returnDict['datetype'] = 'profess' + else: + returnDict['datetype'] = 'life' + return returnDict + + #if one date, determine type of date + elif onedate.search(datestring): + singledate = int(onedate.search(datestring).group('date1')) + if (re.search(r'^ca\.', datestring)) or (re.search('[Aa]pprox(imately)?', datestring)) or ('?' in datestring): + returnDict['datetype'] = 'approx' + elif re.search('[Aa]ctive', datestring) or re.search('^[Ff]l\.', datestring): + returnDict['datetype'] = 'profess' + else: + returnDict['datetype'] = 'life' + + if (re.match(r'^-[0-9]{3,4}', datestring) or re.search('^d\.', datestring)): + returnDict['date2'] = singledate + elif re.search(r'b\.', datestring) or re.match(r'[0-9]{3,4}-(\?|$)', datestring): + returnDict['date1'] = singledate + return returnDict + + else: + return returnDict + +def parsePerson(personField): + """Takes a 100, 600, or 700 field and returns structured information about a person""" + mainName = (personField.split('|')[0]).strip(',') + returnDict = {'Numeration': None, 'Title': None,'Fullname': None, 'displayName': None, + 'date1': None, 'date2': None,'datetype': None, 'relationship': []} + + for attribute in subfieldpat4.findall(personField): + if attribute[0] == '|b': + returnDict['Numeration'] = attribute[1] + elif attribute[0] == '|c': + returnDict['Title'] = attribute[1] + elif attribute[0] == '|d': + datedict = get_person_dates(attribute[1]) + for date_att in datedict: + returnDict[date_att] = datedict[date_att] + elif attribute[0] == '|q': + returnDict['Fullname'] = attribute[1] + elif (attribute[0] == '|t') or (attribute[0] == '|5') or (attribute[0] == '|v'): + pass + elif (attribute[0] == '|e') or (attribute[0] == '|4'): + #see if 'relationship' is in LOC relationship codes table, retrieve if so + if str(attribute[1].strip()) in relCodesDict: + returnDict['relationship'].append(relCodesDict[str(attribute[1].strip())]) + #if not, just add as is + else: + returnDict['relationship'].append(str(attribute[1].strip())) + + if ',' in mainName: + returnDict['displayName'] = mainName.split(',')[1].strip(' .,') + ' ' + mainName.split(',')[0].strip(' .,') + if (returnDict['Numeration'] != None) and (returnDict['displayName'] != None): + returnDict['displayName'] = returnDict['displayName'] + ' ' + returnDict['Numeration'] + if returnDict['displayName'] == None: + returnDict['displayName'] = mainName + return (mainName, returnDict) + +def parseContentsCoarse(inputString, matchList): + #Takes a string of unstructured contents, list of RE matches, and REs for subfields, final numbers, and front-back trimming + #Returns a list of dictionaries with key=foliation, value=contents + contentsList = [] + for x in range(0, len(matchList)): + key = matchList[x].group(0) + start = matchList[x].end() + if len(matchList) - x >=2: + end = matchList[x+1].start() + else: + end = len(inputString) + #eliminate numbers at end + numberTrimmed = re.sub(trailnumpat, '', inputString[start:end]) + #eliminate subfield markers + sectionString = re.sub(subfieldpat, '', numberTrimmed) + #get rid of leading punctuation + frontTrimmed = re.sub(beginpat, '', sectionString) + #get rid of unnecessary characters at the end + outputString = re.sub(endpat, '', frontTrimmed) + #switch 'blank' to correct field if it's been wrongly assigned + if key[-3:] == 'bla': + key = key[:-4] + outputString = 'bla' + outputString + contentsList.append({key: outputString}) + return contentsList + +def parseContentsFine(folia): + #Takes string foliation of contents item and returns range of folia and sides + returnDict = {'startFol': None, 'startSide': None, 'endFol': None, 'endSide': None} + folnums = [match for match in re.finditer(r'(?P[0-9]+)(?P[rv]?)', folia)] + #issue here: can't decide between grabbing 'verso' into greedy Roman numeral pattern, or ignoring Roman + #numeral foliation...leaving out Roman numerals for now. + #find matches of pattern ,e.g. "12v" or "149r" + + if len(folnums)==0: + print 'ERROR' + print(folia) + + #add beginning leaf and side; should be in all + if len(folnums) >=1: + if folnums[0].group('num'): + returnDict['startFol'] = int(folnums[0].group('num')) + + if folnums[0].group('side'): + returnDict['startSide'] = folnums[0].group('side') + + #add ending leaf and side, if there is one + if len(folnums) >1: + if folnums[1].group('num'): + returnDict['endFol'] = int(folnums[1].group('num')) + + if folnums[1].group('side'): + returnDict['endSide'] = folnums[1].group('side') + return returnDict + +######################################################### +######################################################### +######################################################### + +#chief function that calls all the other functions: + +def load(recs): + outputdict = {} + + #iterate over all records in JSON file + for record in recs: + #print(record) + #create dictionary for each one, populated with initial empty arrays for multiple values(external entities) + #add none for all values to avoid key errors + outputdict[record] = {'shelfmark': None, 'volumes': None, 'language': None, 'date1': None, + 'date2': None, 'datetype': None, 'datecertain': True, 'publisher': None, 'places': [], + 'titles': [], 'people': {}, 'contents': [], 'summary': None, 'ownership_history': None} + + + #get structured data from field 008 + #print(record) + structuredData = getStructuredData(recs[record]['008'][0]) + #iterate over components retrieved from 008 + for infoComp in structuredData: + #'country' is treated differently: need to get latitude and longitude + if (infoComp == 'country') and (structuredData[infoComp] != None): + if structuredData[infoComp] in placeCache: + #check to see whether it's in the cache first to avoid unnecessary server call + print 'place cache hit' + outputdict[record]['places'].append(placeCache[structuredData[infoComp]]) + else: + #get coords from server + place008 = {'name': structuredData[infoComp], 'type': 'country'} + ###LIVE CALL TO SERVER + place008coords = get_coords(place008['name']) + place008['lat'] = place008coords['lat'] + place008['lon'] = place008coords['lon'] + #add to output dict, and add to cache + outputdict[record]['places'].append(place008) + placeCache[place008['name']] = place008 + + elif (infoComp == 'country') and (structuredData[infoComp] == None): + pass + #other info components go straight into output dict + else: + outputdict[record][infoComp] = structuredData[infoComp] + + + #iterate over fields and get all information + #sort keys to ensure prerequisite information is available when needed + for field in sorted(recs[record]): + + + #get shelfmark + if '090' in field: + outputdict[record]['shelfmark'] = recs[record][field][0].strip('.; ,') + elif '099' in field: + outputdict[record]['shelfmark'] = recs[record][field][0].strip('.; ,') + + #get place data + if ('260' in field): + #feed field 260 and country into function + locInfo = getPlace(recs[record][field][0], + countryCodesDict[recs[record]['008'][0][15:18].strip()]) + + if locInfo != None: + for loc in locInfo['places']: + outputdict[record]['places'].append(loc) + + if pubpatt.search(field): + outputdict[record]['publisher'] = pubpatt.search(field).group() + else: + outputdict[record]['publisher'] = None + + #see if there are markers of uncertainty in the date, and adjust accordingly + #this sets the "dateCertain" value to True or False + #determines how the date is displayed in the manuscript view page, msview.html c. line 33 + try: + date260 = recs[record][field][0].split('|c')[1] + if(('?' in date260) or ('--' in date260) or ('ca.' in date260) or ('cent' in date260)): + dateCertain = False + except: + #if the pattern doesn't work, remains "true" by default + pass + + #get titles + if ('240' in field) or ('245' in field): + title_cand = getTitles(recs[record][field][0], field[:3]) + if title_cand[0] == 'title': + outputdict[record]['titles'].append({'type': 'main', 'text': title_cand[1]}) + elif title_cand[0] == 'title_uni': + outputdict[record]['titles'].append({'type': 'uniform', 'text': title_cand[1]}) + + if '246' in field: + for vartitle in recs[record][field]: + title_cand = getTitles(vartitle, field[:3]) + if title_cand[0] == 'title_sec_folio': + outputdict[record]['titles'].append({'type': 'secundo', 'text': title_cand[1]}) + else: + outputdict[record]['titles'].append({'type': 'varying', 'text': title_cand[1]}) + + + #get number of volumes, extent, dimensions, material from field 300 + #place into + if '300' in field: + for materials in recs[record][field]: + physical = getPhysDesc(materials) + if physical != None: + for physAttribute in physical: + outputdict[record][physAttribute] = physical[physAttribute] + + + #get AMREMM note field descriptions from fields 500 +############ + if '500' in field: + #start with volume-sensitive ones; iterate over volumes in volumeInfo list + for volnum in range(1, outputdict[record]['volumes'] +1): + #print(volnum) + for descItem in recs[record][field]: + + #nest this: first "Collation"; if there are multiple volumes, check for "volume" + if ('Collation' in descItem): + volind = re.search('Volume ([0-9])', descItem) + + if volind != None: + #this branch will activate if there are multiple volumes and there is a volume indicator + if int(volind.group(1)) != volnum: + #skip -- this field is not applicable to the current volume + pass + else: + #this belongs to the current volume in the iteration + mswms = getWaterMarks(descItem) + if mswms != None: + outputdict[record]['volumeInfo'][volnum-1]['watermarks'] = mswms + else: + outputdict[record]['volumeInfo'][volnum-1]['watermarks'] = [] + if quirepat.search(descItem): + outputdict[record]['volumeInfo'][volnum-1]['quires'] = ' '.join(quirepat.findall(descItem)) + else: + outputdict[record]['volumeInfo'][volnum-1]['quires'] = None + if folpatt.search(descItem): + outputdict[record]['volumeInfo'][volnum-1]['arrangement'] = folpatt.search(descItem).group(0) + else: + outputdict[record]['volumeInfo'][volnum-1]['arrangement'] = None + else: + #no volume indicator: applicable to both or only volume + if len(outputdict[record]['volumeInfo']) == 0: + #add volumeInfo field if there is none + outputdict[record]['volumeInfo'].append({}) + + + mswms = getWaterMarks(descItem) + if mswms != None: + #if there are watermarks, assign to record + outputdict[record]['volumeInfo'][volnum-1]['watermarks'] = mswms + else: + #otherwise, add blank list + outputdict[record]['volumeInfo'][volnum-1]['watermarks'] = [] + + + if quirepat.search(descItem): + #add register of quires, if present + outputdict[record]['volumeInfo'][volnum-1]['quires'] = ' '.join(quirepat.findall(descItem)) + else: + outputdict[record]['volumeInfo'][volnum-1]['quires'] = None + + #add arrangement if present + if folpatt.search(descItem): + outputdict[record]['volumeInfo'][volnum-1]['arrangement'] = folpatt.search(descItem).group(0) + else: + outputdict[record]['volumeInfo'][volnum-1]['arrangement'] = None + + + #get person info from relevant main entry, subject, or added entry fields + if ('100' in field) or ('600' in field) or ('700' in field): + for personInstance in recs[record][field]: + personData = parsePerson(personInstance) + + if ('100' in field) and (len(personData[1]['relationship']) == 0): + personData[1]['relationship'].append('author') + elif ('600' in field) and (len(personData[1]['relationship']) == 0): + personData[1]['relationship'].append('subject') + outputdict[record]['people'][personData[0]] = personData[1] + + + + + if '505' in field: + #print(recs[record][field]) + #get content items (specifically listed textual elements with foliation and titles) + #contentsHolder declared in outermost loop, because there may be multiple 505 fields + + #see if there are separate items by volume; + + + for contentChunk in recs[record][field]: + #set volume index (to determine what volume to assign contents to) to 0 by default + volIndex = 0 + if re.search(r'^[Vv]olume (?P[0-9IV])', contentChunk): + #print(re.search(r'^[Vv]olume (?P[0-9IV])', contentChunk).group('number')) + contentsVolIndex = re.search(r'^[Vv]olume (?P[0-9IV])', contentChunk).group('number') + try: + #get relevant volume number if Arabic numeral + volIndex = int(contentsVolIndex) -1 + except ValueError: + #if Roman numeral, try to get corresponding Arabic + if contentsVolIndex in numerals: + volIndex = numerals[contentsVolIndex] -1 + #otherwise, remains at default of zero + + #contentChunk: one item in the field 505 list, which may contain one or more content items + matches = [result for result in contentspat.finditer(contentChunk)] + smallContentsList = parseContentsCoarse(contentChunk, matches) + + for text in smallContentsList: + for key in text: + contentsHolder = {} + contentsHolder['text'] = text[key] + pagerange = parseContentsFine(key) + for pageItem in pagerange: + contentsHolder[pageItem] = pagerange[pageItem] + #print(parseContentsFine(key)) + if 'contents' in outputdict[record]['volumeInfo'][volIndex]: + outputdict[record]['volumeInfo'][volIndex]['contents'].append(contentsHolder) + else: + outputdict[record]['volumeInfo'][volIndex]['contents'] = [contentsHolder] + + + if '520' in field: + if len(recs[record][field]) >1: + print('Multiple 520!!!') + outputdict[record]['summary'] = recs[record][field][0] + + if '561' in field: + if len(recs[record][field]) >1: + print('Multiple 561!!!') + outputdict[record]['ownership_history'] = recs[record][field][0] + +############ +#^top-level MARC field indent depth + + + #sanity check for volume info and collation; should break this out later to separate function + + #print outputdict[record]['volumeInfo'] + print '\n' + if 'volumeInfo' not in outputdict[record]: + outputdict[record]['volumeInfo'] = [] + #print(record, ': MISSING VOLUME INFO') + + + + for volumeItem in outputdict[record]['volumeInfo']: + #print(volumeItem) + for component in ['quires', 'arrangement']: + if component not in volumeItem: + volumeItem[component] = None; + for listComponent in ['watermarks', 'contents']: + if listComponent not in volumeItem: + volumeItem[listComponent] = [] + return outputdict + + + + + + + +#results = load(sourcedict) + +#for x in results: +# print(results[x]) + #for vol in outputdict[x]['volumeInfo']: + # if 'watermarks' in vol: + + #for wm in vol['watermarks']: + #EXTERNAL HTTP REQUEST: ONLY UNCOMMENT BELOW IF SERIOUS + #print(getBriq(str(wm))) + + # if ('watermarks' in vol) and (len(vol['watermarks']) >0): + # print(outputdict[x]['volumeInfo']) + #print(outputdict[x]['volumes']) + #print('\n') + #if len(outputdict[x]['volumeInfo']) ==0: + + diff --git a/armarium_app/app/forms.py b/armarium_app/app/forms.py new file mode 100644 index 0000000..515489b --- /dev/null +++ b/armarium_app/app/forms.py @@ -0,0 +1,13 @@ +from flask.ext.wtf import Form +from wtforms import StringField, IntegerField, SelectField, FloatField +from flask_wtf.html5 import EmailField +from wtforms.validators import DataRequired, InputRequired + +class MsForm(Form): + shelfmark = StringField('shelfmark', validators=[DataRequired()]) + mstitle = StringField('mstitle', validators=[DataRequired()]) + mstitle_var = StringField('mstitle') + + +class SearchForm(Form): + searchfield = StringField('query', validators=[DataRequired()]) \ No newline at end of file diff --git a/armarium_app/app/loccountrycodes.json b/armarium_app/app/loccountrycodes.json new file mode 100644 index 0000000..e4e00c2 --- /dev/null +++ b/armarium_app/app/loccountrycodes.json @@ -0,0 +1 @@ +{"it": "Italy", "up": "United States Misc. Pacific Islands", "xa": "Christmas Island (Indian Ocean)", "wiu": "Wisconsin", "enk": "England", "lv": "Latvia", "mdu": "Maryland", "wj": "West Bank of the Jordan River", "ve": "Venezuela", "gr": "Greece", "co": "Cura\u00e7ao", "-cz": "Canal Zone", "sx": "Namibia", "bl": "Brazil", "wau": "Washington (State)", "xd": "Saint Kitts-Nevis", "nyu": "New York (State)", "ht": "Haiti", "rb": "Serbia", "ch": "China (Republic : 1949- )", "nmu": "New Mexico", "gy": "Guyana", "as": "American Samoa", "mq": "Martinique", "wvu": "West Virginia", "py": "Paraguay", "mf": "Mauritius", "aku": "Alaska", "mnu": "Minnesota", "-lir": "Lithuania", "nsc": "Nova Scotia", "nkc": "New Brunswick", "mtu": "Montana", "vb": "British Virgin Islands", "-vn": "Vietnam, North", "qea": "Queensland", "wyu": "Wyoming", "tnu": "Tennessee", "pl": "Poland", "pp": "Papua New Guinea", "gi": "Gibraltar", "kyu": "Kentucky", "stk": "Scotland", "aca": "Australian Capital Territory", "ru": "Russia (Federation)", "ke": "Kenya", "ji": "Johnston Atoll", "xb": "Cocos (Keeling) Islands", "mau": "Massachusetts", "fa": "Faroe Islands", "gz": "Gaza Strip", "-bwr": "Byelorussian S.S.R.", "tr": "Trinidad and Tobago", "-hk": "Hong Kong", "-tar": "Tajik S.S.R.", "jm": "Jamaica", "em": "Timor-Leste", "txu": "Texas", "pic": "Prince Edward Island", "sq": "Swaziland", "-mvr": "Moldavian S.S.R.", "dq": "Dominica", "mg": "Madagascar", "bn": "Bosnia and Herzegovina", "sd": "South Sudan", "ndu": "North Dakota", "mj": "Montserrat", "riu": "Rhode Island", "pf": "Paracel Islands", "azu": "Arizona", "-tt": "Trust Territory of the Pacific Islands", "za": "Zambia", "xj": "Saint Helena", "xxc": "Canada", "ku": "Kuwait", "vp": "Various places", "xc": "Maldives", "br": "Burma", "iy": "Iraq-Saudi Arabia Neutral Zone", "-air": "Armenian S.S.R.", "oru": "Oregon", "ft": "Djibouti", "-mh": "Macao", "-kzr": "Kazakh S.S.R.", "bt": "Bhutan", "xp": "Spratly Island", "alu": "Alabama", "-ui": "United Kingdom Misc. Islands", "scu": "South Carolina", "xxk": "United Kingdom", "bcc": "British Columbia", "fs": "Terres australes et antarctiques fran\u00e7aises", "kv": "Kosovo", "fm": "Micronesia (Federated States)", "xk": "Saint Lucia", "xra": "South Australia", "cv": "Cabo Verde", "-lvr": "Latvia", "cd": "Chad", "ba": "Bahrain", "mz": "Mozambique", "inu": "Indiana", "th": "Thailand", "mv": "Moldova", "kg": "Kyrgyzstan", "my": "Malaysia", "bf": "Bahamas", "au": "Austria", "aq": "Antigua and Barbuda", "sw": "Sweden", "tz": "Tanzania", "-gn": "Gilbert and Ellice Islands", "pc": "Pitcairn Island", "-ai": "Anguilla", "-cn": "Canada", "sy": "Syria", "kz": "Kazakhstan", "-sk": "Sikkim", "nhu": "New Hampshire", "ncu": "North Carolina", "-jn": "Jan Mayen", "so": "Somalia", "be": "Belgium", "-wb": "West Berlin", "sa": "South Africa", "nfc": "Newfoundland and Labrador", "ea": "Eritrea", "xoa": "Northern Territory", "gl": "Greenland", "gv": "Guinea", "xm": "Saint Vincent and the Grenadines", "ck": "Colombia", "iau": "Iowa", "gb": "Kiribati", "-kgr": "Kirghiz S.S.R.", "hiu": "Hawaii", "gu": "Guam", "nik": "Northern Ireland", "bi": "British Indian Ocean Territory", "lo": "Lesotho", "cau": "California", "aru": "Arkansas", "deu": "Delaware", "bv": "Bouvet Island", "-iu": "Israel-Syria Demilitarized Zones", "lh": "Liechtenstein", "tma": "Tasmania", "ohu": "Ohio", "nr": "Nigeria", "np": "Nepal", "ie": "Ireland", "ir": "Iran", "cou": "Colorado", "dcu": "District of Columbia", "sf": "Sao Tome and Principe", "no": "Norway", "tc": "Turks and Caicos Islands", "fr": "France", "-vs": "Vietnam, South", "ot": "Mayotte", "-gsr": "Georgian S.S.R.", "-uk": "United Kingdom", "bb": "Barbados", "ay": "Antarctica", "ai": "Armenia (Republic)", "nx": "Norfolk Island", "gw": "Germany", "-uzr": "Uzbek S.S.R.", "un": "Ukraine", "si": "Singapore", "bx": "Brunei", "se": "Seychelles", "li": "Lithuania", "vi": "Virgin Islands of the United States", "sm": "San Marino", "cf": "Congo (Brazzaville)", "ntc": "Northwest Territories", "mm": "Malta", "ja": "Japan", "nvu": "Nevada", "mou": "Missouri", "-ac": "Ashmore and Cartier Islands", "-ry": "Ryukyu Islands, Southern", "mc": "Monaco", "-unr": "Ukraine", "ksu": "Kansas", "-nm": "Northern Mariana Islands", "fg": "French Guiana", "rh": "Zimbabwe", "pe": "Peru", "cl": "Chile", "sp": "Spain", "gd": "Grenada", "mw": "Malawi", "re": "R\u00e9union", "oku": "Oklahoma", "ae": "Algeria", "nw": "Northern Mariana Islands", "gh": "Ghana", "ykc": "Yukon Territory", "hu": "Hungary", "-xi": "Saint Kitts-Nevis-Anguilla", "nl": "New Caledonia", "bd": "Burundi", "sc": "Saint-Barth\u00e9lemy", "is": "Israel", "xo": "Slovakia", "bw": "Belarus", "ii": "India", "cm": "Cameroon", "uik": "United Kingdom Misc. Islands", "-us": "United States", "pau": "Pennsylvania", "nju": "New Jersey", "pg": "Guinea-Bissau", "miu": "Michigan", "snc": "Saskatchewan", "abc": "Alberta", "fp": "French Polynesia", "nn": "Vanuatu", "uc": "United States Misc. Caribbean Islands", "sh": "Spanish North Africa", "fi": "Finland", "fj": "Fiji", "er": "Estonia", "xxu": "United States", "xl": "Saint Pierre and Miquelon", "uv": "Burkina Faso", "go": "Gabon", "ph": "Philippines", "sz": "Switzerland", "utu": "Utah", "gp": "Guadeloupe", "nbu": "Nebraska", "mk": "Oman", "-ln": "Central and Southern Line Islands", "sg": "Senegal", "-ajr": "Azerbaijan S.S.R.", "qa": "Qatar", "jo": "Jordan", "xna": "New South Wales", "fk": "Falkland Islands", "to": "Tonga", "flu": "Florida", "-ur": "Soviet Union", "cu": "Cuba", "wlk": "Wales", "ts": "United Arab Emirates", "xr": "Czech Republic", "am": "Anguilla", "aa": "Albania", "ng": "Niger", "iq": "Iraq", "cc": "China", "ls": "Laos", "et": "Ethiopia", "ua": "Egypt", "sr": "Surinam", "ic": "Iceland", "tl": "Tokelau", "onc": "Ontario", "mbc": "Manitoba", "ec": "Ecuador", "-rur": "Russian S.F.S.R.", "nz": "New Zealand", "-err": "Estonia", "dk": "Denmark", "ag": "Argentina", "gs": "Georgia (Republic)", "-sb": "Svalbard", "wea": "Western Australia", "mr": "Morocco", "-cp": "Canton and Enderbury Islands", "-iw": "Israel-Jordan Demilitarized Zones", "bs": "Botswana", "bo": "Bolivia", "nq": "Nicaragua", "mx": "Mexico", "iv": "C\u00f4te d'Ivoire", "cw": "Cook Islands", "lu": "Luxembourg", "gm": "Gambia", "gau": "Georgia", "rw": "Rwanda", "vtu": "Vermont", "st": "Saint-Martin", "wf": "Wallis and Futuna", "ko": "Korea (South)", "xv": "Slovenia", "cb": "Cambodia", "ctu": "Connecticut", "ti": "Tunisia", "af": "Afghanistan", "sn": "Sint Maarten", "mu": "Mauritania", "bg": "Bangladesh", "ye": "Yemen", "ao": "Angola", "xn": "Macedonia", "ci": "Croatia", "bm": "Bermuda Islands", "-cs": "Czechoslovakia", "bp": "Solomon Islands", "io": "Indonesia", "an": "Andorra", "tk": "Turkmenistan", "xs": "South Georgia and the South Sandwich Islands", "vau": "Virginia", "pn": "Panama", "-pt": "Portuguese Timor", "uz": "Uzbekistan", "dm": "Benin", "-tkr": "Turkmen S.S.R.", "-yu": "Serbia and Montenegro", "aw": "Aruba", "aj": "Azerbaijan", "eg": "Equatorial Guinea", "xf": "Midway Islands", "wk": "Wake Island", "nuc": "Nunavut", "ws": "Samoa", "gt": "Guatemala", "sj": "Sudan", "bu": "Bulgaria", "ug": "Uganda", "dr": "Dominican Republic", "ne": "Netherlands", "lb": "Liberia", "xga": "Coral Sea Islands Territory", "-ys": "Yemen (People's Democratic Republic)", "cj": "Cayman Islands", "lau": "Louisiana", "le": "Lebanon", "vm": "Vietnam", "ss": "Western Sahara", "ce": "Sri Lanka", "ml": "Mali", "bh": "Belize", "kn": "Korea (North)", "cy": "Cyprus", "ca": "Caribbean Netherlands", "msu": "Mississippi", "mo": "Montenegro", "meu": "Maine", "uy": "Uruguay", "tv": "Tuvalu", "ly": "Libya", "ilu": "Illinois", "xe": "Marshall Islands", "rm": "Romania", "tg": "Togo", "xh": "Niue", "vc": "Vatican City", "quc": "Qu\u00e9bec (Province)", "mp": "Mongolia", "cr": "Costa Rica", "cx": "Central African Republic", "vra": "Victoria", "pw": "Palau", "cq": "Comoros", "es": "El Salvador", "idu": "Idaho", "xx": "No place, unknown, or undetermined", "sdu": "South Dakota", "nu": "Nauru", "pk": "Pakistan", "-na": "Netherlands Antilles", "ta": "Tajikistan", "tu": "Turkey", "ho": "Honduras", "at": "Australia", "su": "Saudi Arabia", "-xxr": "Soviet Union", "-ge": "Germany (East)", "-sv": "Swan Islands", "pr": "Puerto Rico", "cg": "Congo (Democratic Republic)", "hm": "Heard and McDonald Islands", "po": "Portugal", "sl": "Sierra Leone"} \ No newline at end of file diff --git a/armarium_app/app/loclangcodes.json b/armarium_app/app/loclangcodes.json new file mode 100644 index 0000000..c8b492d --- /dev/null +++ b/armarium_app/app/loclangcodes.json @@ -0,0 +1 @@ +{"bos": "Bosnian", "ltz": "Luxembourgish", "tib": "Tibetan", "srr": "Serer", "hit": "Hittite", "bak": "Bashkir", "fry": "Frisian", "tet": "Tetum", "iku": "Inuktitut", "smn": "Inari Sami", "mdr": "Mandar", "haw": "Hawaiian", "non": "Old Norse", "chr": "Cherokee", "tuk": "Turkmen", "por": "Portuguese", "byn": "Bilin", "ast": "Bable", "geo": "Georgian", "cho": "Choctaw", "mlt": "Maltese", "sms": "Skolt Sami", "ceb": "Cebuano", "ypk": "Yupik languages", "tha": "Thai", "hmn": "Hmong", "kor": "Korean", "nyo": "Nyoro", "dak": "Dakota", "hun": "Hungarian", "ine": "Indo-European (Other)", "zap": "Zapotec", "-iri": "Irish", "urd": "Urdu", "arp": "Arapaho", "krl": "Karelian", "egy": "Egyptian", "sin": "Sinhalese", "shn": "Shan", "yao": "Yao (Africa)", "fil": "Filipino", "bas": "Basa", "fon": "Fon", "day": "Dayak", "him": "Western Pahari languages", "uga": "Ugaritic", "khm": "Khmer", "eng": "English", "kam": "Kamba", "bra": "Braj", "gon": "Gondi", "cel": "Celtic (Other)", "sog": "Sogdian", "vol": "Volap\u00fck", "mlg": "Malagasy", "nso": "Northern Sotho", "-scr": "Croatian", "hsb": "Upper Sorbian", "nah": "Nahuatl", "moh": "Mohawk", "run": "Rundi", "nep": "Nepali", "aka": "Akan", "rup": "Aromanian", "-gag": "Galician", "sas": "Sasak", "orm": "Oromo", "zha": "Zhuang", "nic": "Niger-Kordofanian (Other)", "tiv": "Tiv", "cre": "Cree", "-sao": "Samoan", "-sso": "Sotho", "-kus": "Kusaie", "bul": "Bulgarian", "-lap": "Sami", "chy": "Cheyenne", "-tar": "Tatar", "lui": "Luise\u00f1o", "paa": "Papuan (Other)", "tai": "Tai (Other)", "wol": "Wolof", "sah": "Yakut", "-snh": "Sinhalese", "alt": "Altai", "kpe": "Kpelle", "per": "Persian", "pam": "Pampanga", "-fri": "Frisian", "div": "Divehi", "sga": "Irish, Old (to 1100)", "nde": "Ndebele (Zimbabwe)", "iro": "Iroquoian (Other)", "-gae": "Scottish Gaelix", "den": "Slavey", "mac": "Macedonian", "syr": "Syriac, Modern", "akk": "Akkadian", "alb": "Albanian", "mdf": "Moksha", "ton": "Tongan", "umb": "Umbundu", "gez": "Ethiopic", "lus": "Lushai", "mad": "Madurese", "bug": "Bugis", "zbl": "Blissymbolics", "bih": "Bihari (Other) ", "nor": "Norwegian", "ace": "Achinese", "mar": "Marathi", "zen": "Zenaga", "art": "Artificial (Other)", "snd": "Sindhi", "tig": "Tigr\u00e9", "yap": "Yapese", "kir": "Kyrgyz", "som": "Somali", "lav": "Latvian", "elx": "Elamite", "kom": "Komi", "swe": "Swedish", "nav": "Navajo", "kaw": "Kawi", "kal": "Kal\u00e2tdlisut", "car": "Carib", "pal": "Pahlavi", "inc": "Indic (Other)", "ssw": "Swazi", "hup": "Hupa", "hai": "Haida", "tup": "Tupi languages", "mus": "Creek", "bem": "Bemba", "hmo": "Hiri Motu", "arn": "Mapuche", "men": "Mende", "her": "Herero", "mul": "Multiple languages", "hau": "Hausa", "goh": "German, Old High (ca. 750-1050)", "lez": "Lezgian", "srp": "Serbian", "smj": "Lule Sami", "ara": "Arabic", "oci": "Occitan (post-1500)", "kua": "Kuanyama", "bho": "Bhojpuri", "ira": "Iranian (Other)", "sit": "Sino-Tibetan (Other)", "alg": "Algonquian (Other)", "btk": "Batak", "rum": "Romanian", "lua": "Luba-Lulua", "spa": "Spanish", "tam": "Tamil", "cpp": "Creoles and Pidgins, Portuguese-based (Other)", "kho": "Khotanese", "aze": "Azerbaijani", "-gal": "Oromo", "zul": "Zulu", "peo": "Old Persian (ca. 600-400 B.C.)", "bla": "Siksika", "sem": "Semitic (Other)", "que": "Quechua", "chp": "Chipewyan", "wak": "Wakashan languages", "cau": "Caucasian (Other)", "hrv": "Croatian", "kha": "Khasi", "ber": "Berber (Other)", "hil": "Hiligaynon", "tkl": "Tokelauan", "enm": "English, Middle (1100-1500)", "crh": "Crimean Tatar", "rar": "Rarotongan", "rap": "Rapanui", "-eth": "Ethiopic", "jpn": "Japanese", "kru": "Kurukh", "son": "Songhai", "kon": "Kongo", "-swz": "Swazi", "tso": "Tsonga", "ath": "Athapascan (Other)", "-esk": "Eskimo languages", "man": "Mandingo", "kab": "Kabyle", "ada": "Adangme", "vai": "Vai", "mkh": "Mon-Khmer (Other)", "jbo": "Lojban (Artificial language)", "ile": "Interlingue", "mni": "Manipuri", "hin": "Hindi", "sna": "Shona", "krc": "Karachay-Balkar", "wel": "Welsh", "slv": "Slovenian", "gba": "Gbaya", "sme": "Northern Sami", "pag": "Pangasinan", "mao": "Maori", "nno": "Norwegian (Nynorsk)", "bre": "Breton", "mal": "Malayalam", "arm": "Armenian", "tir": "Tigrinya", "nob": "Norwegian (Bokm\u00e5l)", "kur": "Kurdish", "hat": "Haitian French Creole", "grn": "Guarani", "ndo": "Ndonga", "mak": "Makasar", "afr": "Afrikaans", "nzi": "Nzima", "nyn": "Nyankole", "nym": "Nyamwezi", "tah": "Tahitian", "kbd": "Kabardian", "slo": "Slovak", "ipk": "Inupiaq", "sid": "Sidamo", "ewo": "Ewondo", "-mol": "Moldavian", "-mla": "Malagasy", "chb": "Chibcha", "mas": "Maasai", "nbl": "Ndebele (South Africa)", "mun": "Munda (Other)", "chm": "Mari", "cat": "Catalan", "-tru": "Truk", "lit": "Lithuanian", "-max": "Manx", "scn": "Sicilian Italian", "pon": "Pohnpeian", "ssa": "Nilo-Saharan (Other)", "myv": "Erzya", "rus": "Russian", "zun": "Zuni", "lun": "Lunda", "-cam": "Khmer", "kaa": "Kara-Kalpak", "suk": "Sukuma", "bad": "Banda languages", "kas": "Kashmiri", "ido": "Ido", "gem": "Germanic (Other)", "pol": "Polish", "sus": "Susu", "gor": "Gorontalo", "ibo": "Igbo", "tut": "Altaic (Other)", "mwl": "Mirandese", "kac": "Kachin", "heb": "Hebrew", "pus": "Pushto", "-lan": "Occitan (post 1500)", "gay": "Gayo", "sat": "Santali", "srn": "Sranan", "mah": "Marshallese", "xho": "Xhosa", "-taj": "Tajik", "uig": "Uighur", "tpi": "Tok Pisin", "was": "Washoe", "gil": "Gilbertese", "tli": "Tlingit", "nai": "North American Indian (Other)", "pau": "Palauan", "dyu": "Dyula", "tum": "Tumbuka", "ady": "Adygei", "gla": "Scottish Gaelic", "ven": "Venda", "mnc": "Manchu", "tat": "Tatar", "awa": "Awadhi", "jav": "Javanese", "apa": "Apache languages", "-int": "Interlingua (International Auxiliary Language\nAssociation)", "epo": "Esperanto", "yid": "Yiddish", "ita": "Italian", "est": "Estonian", "fij": "Fijian", "snk": "Soninke", "mis": "Miscellaneous languages", "kut": "Kootenai", "crp": "Creoles and Pidgins (Other)", "kaz": "Kazakh", "glv": "Manx", "uzb": "Uzbek", "wen": "Sorbian (Other)", "myn": "Mayan languages", "kan": "Kannada", "eka": "Ekajuk", "bua": "Buriat", "-tsw": "Tswana", "del": "Delaware", "cus": "Cushitic (Other)", "cad": "Caddo", "fiu": "Finno-Ugrian (Other)", "pap": "Papiamento", "und": "Undetermined", "grb": "Grebo", "ice": "Icelandic", "wal": "Wolayta", "dum": "Dutch, Middle (ca. 1050-1350)", "udm": "Udmurt", "nwc": "Newari, Old", "lam": "Lamba (Zambia and Congo)", "sgn": "Sign languages", "doi": "Dogri", "osa": "Osage", "tsn": "Tswana", "ori": "Oriya", "chk": "Chuukese", "cmc": "Chamic languages", "khi": "Khoisan (Other)", "lat": "Latin", "gsw": "Swiss German", "frm": "French, Middle (ca. 1300-1600)", "tel": "Telugu", "sio": "Siouan (Other)", "mno": "Manobo languages", "tem": "Temne", "smi": "Sami", "-esp": "Esperanto", "tur": "Turkish", "phn": "Phoenician", "lug": "Ganda", "sai": "South American Indian (Other)", "loz": "Lozi", "bel": "Belarusian", "cop": "Coptic", "ger": "German", "kro": "Kru (Other)", "-sho": "Shona", "arg": "Aragonese", "got": "Gothic", "fur": "Friulian", "fao": "Faroese", "tmh": "Tamashek", "vot": "Votic", "bnt": "Bantu (Other)", "dua": "Duala", "dzo": "Dzongkha", "ava": "Avaric", "cor": "Cornish", "amh": "Amharic", "din": "Dinka", "ach": "Acoli", "aus": "Australian languages", "gle": "Irish", "cai": "Central American Indian (Other)", "zza": "Zaza", "bur": "Burmese", "ter": "Terena", "nqo": "N'Ko", "mwr": "Marwari", "ful": "Fula", "gmh": "German, Middle High (ca. 1050-1500)", "fre": "French", "new": "Newari", "nya": "Nyanja", "jrb": "Judeo-Arabic", "war": "Waray", "luo": "Luo (Kenya and Tanzania)", "ewe": "Ewe", "roh": "Raeto-Romance", "kok": "Konkani", "kar": "Karen languages", "afh": "Afrihili (Artificial language)", "kau": "Kanuri", "tgk": "Tajik", "min": "Minangkabau", "ilo": "Iloko", "aym": "Aymara", "dsb": "Lower Sorbian", "pra": "Prakrit languages", "arw": "Arawak", "cpf": "Creoles and Pidgins, French-based (Other)", "oss": "Ossetic", "gaa": "G\u00e3", "ban": "Balinese", "-far": "Faroese", "may": "Malay", "bin": "Edo", "dgr": "Dogrib", "-ajm": "Aljam\u00eda", "pro": "Proven\u00e7al (to 1500)", "fan": "Fang", "swa": "Swahili", "sla": "Slavic (Other)", "frs": "East Frisian", "anp": "Angika", "oto": "Otomian languages", "fin": "Finnish", "chi": "Chinese", "twi": "Twi", "csb": "Kashubian", "ale": "Aleut", "oji": "Ojibwa", "yor": "Yoruba", "ain": "Ainu", "lol": "Mongo-Nkundu", "sco": "Scots", "sux": "Sumerian", "nap": "Neapolitan Italian", "fat": "Fanti", "znd": "Zande languages", "smo": "Samoan", "dra": "Dravidian (Other)", "sad": "Sandawe", "ind": "Indonesian", "syc": "Syriac", "frr": "North Frisian", "grc": "Greek, Ancient (to 1453)", "cze": "Czech", "ave": "Avestan", "inh": "Ingush", "efi": "Efik", "baq": "Basque", "gre": "Greek, Modern (1453-)", "-tag": "Tagalog", "chn": "Chinook jargon", "che": "Chechen", "bai": "Bamileke languages", "mos": "Moor\u00e9", "-scc": "Serbian", "gwi": "Gwich'in", "tvl": "Tuvaluan", "tgl": "Tagalog", "lim": "Limburgish", "tog": "Tonga (Nyasa)", "nau": "Nauru", "bik": "Bikol", "mag": "Magahi", "bej": "Beja", "phi": "Philippine (Other)", "dan": "Danish", "kum": "Kumyk", "nub": "Nubian languages", "rom": "Romani", "map": "Austronesian (Other)", "zxx": "No linguistic content", "san": "Sanskrit", "ina": "Interlingua (International Auxiliary Language\nAssociation)", "tlh": "Klingon (Artificial language)", "dar": "Dargwa", "sel": "Selkup", "afa": "Afroasiatic (Other)", "kos": "Kosraean", "mic": "Micmac", "asm": "Assamese", "chg": "Chagatai", "dut": "Dutch", "kik": "Kikuyu", "lin": "Lingala", "roa": "Romance (Other)", "mon": "Mongolian", "abk": "Abkhaz", "mga": "Irish, Middle (ca. 1100-1550)", "lah": "Lahnd\u0101", "lad": "Ladino", "tyv": "Tuvinian", "fro": "French, Old (ca. 842-1300)", "lao": "Lao", "nog": "Nogai", "ben": "Bengali", "bat": "Baltic (Other)", "sal": "Salishan languages", "sag": "Sango (Ubangi Creole)", "cha": "Chamorro", "nia": "Nias", "bam": "Bambara", "tsi": "Tsimshian", "wln": "Walloon", "sam": "Samaritan Aramaic", "bis": "Bislama", "srd": "Sardinian", "cos": "Corsican", "mai": "Maithili", "sun": "Sundanese", "ota": "Turkish, Ottoman", "sma": "Southern Sami", "bal": "Baluchi", "glg": "Galician", "ukr": "Ukrainian", "cpe": "Creoles and Pidgins, English-based (Other)", "chv": "Chuvash", "guj": "Gujarati", "-gua": "Guarani", "arc": "Aramaic", "pli": "Pali", "iii": "Sichuan Yi", "aar": "Afar", "chu": "Church Slavic", "sot": "Sotho", "nds": "Low German", "lub": "Luba-Katanga", "kmb": "Kimbundu", "iba": "Iban", "ang": "English, Old (ca. 450-1100)", "ijo": "Ijo", "xal": "Oirat", "vie": "Vietnamese", "jpr": "Judeo-Persian", "pan": "Panjabi", "kin": "Kinyarwanda", "raj": "Rajasthani", "niu": "Niuean"} \ No newline at end of file diff --git a/armarium_app/app/locrelcodes.json b/armarium_app/app/locrelcodes.json new file mode 100644 index 0000000..beab32f --- /dev/null +++ b/armarium_app/app/locrelcodes.json @@ -0,0 +1 @@ +{"dis": "Dissertant", "wpr": "Writer of preface", "egr": "Engraver", "lbt": "Librettist", "ptt": "Plaintiff-appellant", "scl": "Sculptor", "spn": "Sponsor", "len": "Lender", "prd": "Production personnel", "sec": "Secretary", "res": "Researcher", "pup": "Publication place", "aud": "Author of dialog", "clr": "Colorist", "bpd": "Bookplate designer", "brl": "Braille embosser", "own": "Owner", "ctg": "Cartographer", "ccp": "Conceptor", "chr": "Choreographer", "win": "Writer of introduction", "lil": "Libelant", "mfr": "Manufacturer", "wdc": "Woodcutter", "pro": "Producer", "cov": "Cover designer", "mtk": "Minute taker", "cas": "Caster", "dfe": "Defendant-appellee", "cmm": "Commentator", "adi": "Art director", "lso": "Licensor", "pht": "Photographer", "ldr": "Laboratory director", "cos": "Contestant", "pan": "Panelist", "tld": "Television director", "std": "Set designer", "crp": "Correspondent", "ctr": "Contractor", "drt": "Director", "bdd": "Binding designer", "brd": "Broadcaster", "lyr": "Lyricist", "cmt": "Compositor", "coe": "Contestant-appellee", "fac": "Facsimilist", "eng": "Engineer", "rpc": "Radio producer", "mrk": "Markup editor", "rev": "Reviewer", "-clb": "Collaborator", "aui": "Author of introduction, etc.", "-grt": "Graphic technician", "ppt": "Puppeteer", "cst": "Costume designer", "cur": "Curator", "sgn": "Signer", "cli": "Client", "scr": "Scribe", "tyd": "Type designer", "att": "Attributed name", "rcd": "Recordist", "fmk": "Filmmaker", "rcp": "Addressee", "rps": "Repository", "dln": "Delineator", "ptf": "Plaintiff", "dto": "Dedicator", "cng": "Cinematographer", "enj": "Enacting jurisdiction", "evp": "Event place", "mod": "Moderator", "nrt": "Narrator", "adp": "Adapter", "dgg": "Degree granting institution", "dnr": "Donor", "prt": "Printer", "crr": "Corrector", "sds": "Sound designer", "lsa": "Landscape architect", "vac": "Voice actor", "ann": "Annotator", "anm": "Animator", "edt": "Editor", "abr": "Abridger", "stl": "Storyteller", "cpe": "Complainant-appellee", "cnd": "Conductor", "dpt": "Depositor", "asn": "Associated name", "fpy": "First party", "dsr": "Designer", "pbd": "Publishing director", "isb": "Issuing body", "clt": "Collotyper", "osp": "Onscreen presenter", "trl": "Translator", "cor": "Collection registrar", "auc": "Auctioneer", "ivr": "Interviewer", "gis": "Geographic information specialist", "aus": "Screenwriter", "tlp": "Television producer", "sht": "Supporting host", "jud": "Judge", "dub": "Dubious author", "rpt": "Reporter", "spy": "Second party", "sng": "Singer", "elt": "Electrotyper", "prp": "Production place", "vdg": "Videographer", "app": "Applicant", "ill": "Illustrator", "rse": "Respondent-appellee", "lse": "Licensee", "etr": "Etcher", "pmn": "Production manager", "dte": "Dedicatee", "sce": "Scenarist", "frg": "Forger", "art": "Artist", "-voc": "Vocalist", "dbp": "Distribution place", "prc": "Process contact", "jug": "Jurisdiction governed", "wde": "Wood engraver", "ive": "Interviewee", "blw": "Blurb writer", "pop": "Printer of plates", "his": "Host institution", "msd": "Musical director", "prs": "Production designer", "pbl": "Publisher", "edm": "Editor of moving image work", "cot": "Contestant-appellant", "prn": "Production company", "pta": "Patent applicant", "str": "Stereotyper", "ctt": "Contestee-appellant", "arr": "Arranger", "act": "Actor", "csp": "Consultant to a project", "mus": "Musician", "lbr": "Laboratory", "prv": "Provider", "ppm": "Papermaker", "mrb": "Marbler", "rpy": "Responsible party", "uvp": "University place", "pdr": "Project director", "wal": "Writer of added lyrics", "ard": "Artistic director", "sll": "Seller", "rsg": "Restager", "cph": "Copyright holder", "trc": "Transcriber", "fnd": "Funder", "sad": "Scientific advisor", "org": "Originator", "mdc": "Metadata contact", "fds": "Film distributor", "aqt": "Author in quotations or text abstracts", "stn": "Standards body", "col": "Collector", "rdd": "Radio director", "flm": "Film editor", "dft": "Defendant-appellant", "bjd": "Bookjacket designer", "mte": "Metal-engraver", "hnr": "Honoree", "ato": "Autographer", "con": "Conservator", "pat": "Patron", "dfd": "Defendant", "rbr": "Rubricator", "spk": "Speaker", "cpc": "Copyright claimant", "cpl": "Complainant", "dgs": "Degree supervisor", "dpc": "Depicted", "ths": "Thesis advisor", "mfp": "Manufacture place", "wac": "Writer of added commentary", "lgd": "Lighting designer", "cre": "Creator", "red": "Redaktor", "lel": "Libelee", "cwt": "Commentator for written text", "fmo": "Former owner", "bnd": "Binder", "elg": "Electrician", "cpt": "Complainant-appellant", "opn": "Opponent", "bkp": "Book producer", "cll": "Calligrapher", "apl": "Appellant", "dtm": "Data manager", "com": "Compiler", "mon": "Monitor", "prg": "Programmer", "prm": "Printmaker", "cou": "Court governed", "pra": "Praeses", "cmp": "Composer", "acp": "Art copyist", "rsr": "Restorationist", "lee": "Libelee-appellee", "anl": "Analyst", "srv": "Surveyor", "fld": "Field director", "stg": "Setting", "pth": "Patent holder", "rst": "Respondent-appellant", "orm": "Organizer", "bsl": "Bookseller", "let": "Libelee-appellant", "arc": "Architect", "wst": "Writer of supplementary textual content", "oth": "Other", "asg": "Assignee", "ctb": "Contributor", "ins": "Inscriber", "cns": "Censor", "pte": "Plaintiff-appellee", "rtm": "Research team member", "edc": "Editor of compilation", "drm": "Draftsman", "dst": "Distributor", "lie": "Libelant-appellee", "wat": "Writer of added text", "inv": "Inventor", "rth": "Research team head", "prf": "Performer", "cts": "Contestee", "stm": "Stage manager", "pre": "Presenter", "ren": "Renderer", "ant": "Bibliographic antecedent", "rsp": "Respondent", "plt": "Platemaker", "sgd": "Stage director", "med": "Medium", "fmp": "Film producer", "ltg": "Lithographer", "ape": "Appellee", "wam": "Writer of accompanying material", "itr": "Instrumentalist", "aft": "Author of afterword, colophon, etc.", "bkd": "Book designer", "tch": "Teacher", "pfr": "Proofreader", "lit": "Libelant-appellant", "tyg": "Typographer", "crt": "Court reporter", "led": "Lead", "exp": "Expert", "rce": "Recording engineer", "ilu": "Illuminator", "pma": "Permitting agency", "csl": "Consultant", "dnc": "Dancer", "wit": "Witness", "hst": "Host", "mcp": "Music copyist", "cte": "Contestee-appellee", "aut": "Author", "tcd": "Technical director", "fmd": "Film director", "dtc": "Data contributor"} \ No newline at end of file diff --git a/armarium_app/app/models.py b/armarium_app/app/models.py new file mode 100644 index 0000000..69eb3c4 --- /dev/null +++ b/armarium_app/app/models.py @@ -0,0 +1,148 @@ +from app import db + +#association table for a manuscript and a watermark (see below) +has_watermark = db.Table('has_watermark', + db.Column('ms_id', db.Integer, db.ForeignKey('manuscript.id')), + db.Column('wm_id', db.Integer, db.ForeignKey('watermark.id')) + ) + +#association table for manuscript and place +has_place = db.Table('has_place', + db.Column('ms_id', db.Integer, db.ForeignKey('manuscript.id')), + db.Column('place_id', db.Integer, db.ForeignKey('place.id')) + ) + + +#the central entity of the system, representing a unified textual item +class manuscript(db.Model): + id = db.Column(db.Integer, primary_key=True) + shelfmark = db.Column(db.String(15)) + date1 = db.Column(db.Integer) + date2 = db.Column(db.Integer) + datetype = db.Column(db.Integer) + language = db.Column(db.String(60)) + summary = db.Column(db.String(1000)) + #520 + ownership_history = db.Column(db.String(1000)) + #561 + num_volumes = db.Column(db.Integer) + #relationships + volumes = db.relationship('volume', + backref = 'ms', + lazy='dynamic') + contents = db.relationship('content_item', + backref = 'ms', + lazy='dynamic') + titles = db.relationship('title', + backref = 'ms', + lazy='dynamic' + ) + watermarks = db.relationship('watermark', + secondary = has_watermark, + backref = db.backref('mss', lazy='dynamic') + ) + assoc_people = db.relationship('person_ms_assoc', + backref = 'ms', + lazy='dynamic') + places = db.relationship('place', + secondary = has_place, + backref = db.backref('mss', lazy='dynamic') + ) + + + def __repr__(self): + return self.shelfmark + +#the physical manifestation of a manuscript; there may be more than one +#for a multi-volume item +class volume(db.Model): + id = db.Column(db.Integer, primary_key=True) + ms_format = db.Column(db.String(20)) + support = db.Column(db.String(15)) + extent = db.Column(db.Integer) + extent_unit = db.Column(db.String(3)) + bound_width = db.Column(db.Integer) + bound_height = db.Column(db.Integer) + leaf_width = db.Column(db.Integer) + leaf_height = db.Column(db.Integer) + written_width = db.Column(db.Integer) + written_height = db.Column(db.Integer) + size_unit = db.Column(db.String(3)) + written_lines = db.Column(db.Integer) + quire_register = db.Column(db.String(60)) + phys_arrangement = db.Column(db.String(60)) + decoration = db.Column(db.String(1000)) + contents = db.relationship('content_item', + backref = 'volume', + lazy='dynamic') + + ms_id = db.Column(db.Integer, db.ForeignKey('manuscript.id')) + + +#a discrete textual item in a manuscript +class content_item(db.Model): + id = db.Column(db.Integer, primary_key=True) + text = db.Column(db.String(1000)) + fol_start_num = db.Column(db.Integer) + fol_start_side = db.Column(db.String(1)) + fol_end_num = db.Column(db.Integer) + fol_end_side = db.Column(db.String(1)) + + ms_id = db.Column(db.Integer, db.ForeignKey('manuscript.id')) + vol_id = db.Column(db.Integer, db.ForeignKey('volume.id')) + +#a person related to a manuscript or text +class person(db.Model): + id = db.Column(db.Integer, primary_key=True) + name_display = db.Column(db.String(200)) + name_simple = db.Column(db.String(200)) + name_fuller = db.Column(db.String(200)) + year_1 = db.Column(db.Integer) + year_2 = db.Column(db.Integer) + datetype = db.Column(db.Integer) + numeration = db.Column(db.String(20)) + title = db.Column(db.String(30)) + ms_relations = db.relationship('person_ms_assoc', + backref = 'person', + lazy='dynamic') + +#an association between a person and a manuscript; +#rendered as a full model to capture nature of relationship +class person_ms_assoc(db.Model): + id = db.Column(db.Integer, primary_key=True) + person_id = db.Column(db.Integer, db.ForeignKey('person.id')) + ms_id = db.Column(db.Integer, db.ForeignKey('manuscript.id')) + assoc_type = db.Column(db.String(50)) + +#support, format, datetype as separate lookup table? + +#title of a manuscript, whether main or alternate name/spelling +class title(db.Model): + id = db.Column(db.Integer, primary_key=True) + title_text = db.Column(db.String(150)) + title_type = db.Column(db.String(20)) + #possible values are main, uniform, varying, secundo folio + ms_id = db.Column(db.Integer, db.ForeignKey('manuscript.id')) + + def __repr__(self): + return self.title_text + +#a watermark in the manuscript's support +class watermark(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(40)) + url = db.Column(db.String(100)) + + def __repr__(self): + return '' + +class place(db.Model): + id = db.Column(db.Integer, primary_key = True) + place_name = db.Column(db.String(60)) + place_type = db.Column(db.String(10)) + lat = db.Column(db.Float) + lon = db.Column(db.Float) + + def __repr__(self): + return '' + diff --git a/armarium_app/app/static/berkeleyischool-logo-blue-sm.png b/armarium_app/app/static/berkeleyischool-logo-blue-sm.png new file mode 100644 index 0000000..15877f8 Binary files /dev/null and b/armarium_app/app/static/berkeleyischool-logo-blue-sm.png differ diff --git a/armarium_app/app/static/main.css b/armarium_app/app/static/main.css new file mode 100644 index 0000000..0e18467 --- /dev/null +++ b/armarium_app/app/static/main.css @@ -0,0 +1,224 @@ +/*----------------- CSS RESET ------------------*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +/*----------------- CSS RESET ------------------*/ +html, body { + background-color: #FEFAE9; + height: 100%; + margin: 0; + padding: 0; +} + +#wrapper { + margin: 1em; + border-width: 2px; + border-style: solid; + border-color: #C5C3BC; + border-radius: 2px; + +} +h1, h2 { + font-size: 2em; + font-family: "Times New Roman"; + color: #AA4242; + font-style: italic; +} + +h3, h4, h5, h6 { + font-family: "Times New Roman"; + color: #3F3E3A; +} + +h3 { + font-size: 1.5em; + margin-left: .5em; +} + +h4 { + font-size: 1.2em; +} + +p, td, th { + color: #3F3E3A; + font-family: "Times New Roman"; + font-size: 1em; +} + +em { + font-style: italic; +} + +header { + text-align: center; +} + +nav a { + background-color: #3F3E3A; + color: #FEFAE9; + padding-left: .2em; + padding-right: .2em; + +} + +#collectionmap { + height: 60%; + width: 75%; + margin: .5em; + display: inline-block; + text-align: center; +} + +#map { + height: 100%; + width: 100%; + text-align: right; +} + +.section, .mapholder { + margin: .75em; + border-style: solid; + border-width: 1px; + border-color: #000000; + padding: .5em; +} + +.mapholder { + text-align: center; + height: 100%; +} + +.placemapholder { + text-align: right; + display: inline-block; + width: 48%; +} + +.mstable { + vertical-align: top; + text-align: left; + display: inline-block; + width: 48%; +} + + +header { + margin: .5em; +} + +footer { + border-top: 1px; + border-style: solid; + border-width: 1px; + border-color: #000000; + padding: .5em; + margin: .5em; +} +footer *{ + display: inline-block; + margin: .5em; +} + +img.logo { + height: 49px; +} + +table, th, td { + vertical-align: top; + border-width: 2px; + border-style: solid; + border-color: #C5C3BC; + border-collapse: collapse; + padding: 3px; + margin: 2px; +} + +th *{ + font-weight: bold; +} + + +b { + font-weight: bold; +} + + + +/* for D3 vis */ +.node { + stroke: #fff; + stroke-width: 1.5px; +} + +.link { + stroke: #999; + stroke-opacity: .6; +} + +.label { + font-family: sans-serif; + font-size: .5em; +} + +#textvis, #relationvis { + max-width: 50% + max-height: 100%; + text-align: center; +} + +#contentsdiv { + overflow-y: scroll; + height: 50%; + margin: .5em; + border-style: solid; + border-color: #3F3E3A; + border-width: 2px; +} +/* +#graphcanvas { + max-width: 50% + max-height: 100%; +} +*/ \ No newline at end of file diff --git a/armarium_app/app/static/primary-berkeley-law.gif b/armarium_app/app/static/primary-berkeley-law.gif new file mode 100644 index 0000000..7d0b122 Binary files /dev/null and b/armarium_app/app/static/primary-berkeley-law.gif differ diff --git a/armarium_app/app/static/robbins_icon.gif b/armarium_app/app/static/robbins_icon.gif new file mode 100644 index 0000000..c342b6e Binary files /dev/null and b/armarium_app/app/static/robbins_icon.gif differ diff --git a/armarium_app/app/static/script.js b/armarium_app/app/static/script.js new file mode 100644 index 0000000..0bae3a2 --- /dev/null +++ b/armarium_app/app/static/script.js @@ -0,0 +1,16 @@ +var tablelookup = {0: 'manuscript', 1: 'person', 2: 'place', 3: 'watermark', 4: 'organization', +5: 'ex_doc', 6: 'subject', 7: 'publisher'}; + +var jsonEndpoint = '/sendjson' + +function getNewNodes (node) { + //query = jsonEndpoint + tablelookup[node.getAttribute('group')] + '&id=' + node.getAttribute('dbkey'); + //console.log(query); + $.get(jsonEndpoint, + {'entity': tablelookup[node.getAttribute('group')], + 'id': node.getAttribute('dbkey')}, + function(data) { + console.log(data); + }, + "json"); +} \ No newline at end of file diff --git a/armarium_app/app/templates/base.html b/armarium_app/app/templates/base.html new file mode 100644 index 0000000..4fa0944 --- /dev/null +++ b/armarium_app/app/templates/base.html @@ -0,0 +1,35 @@ + + + + {{ pagetitle }} + + + + + + + + + +
+
+

Manuscripts of the Robbins Collection

+ +
+ {% block content %} + {% endblock %} +
+ + +

© The Regents of the University of California, The Robbins Religious and Civil Law Collection, School of Law (Boalt Hall), University of California at Berkeley. • A Project of The Robbins Collection and the UC Berkeley School of Information

+
+
+ + \ No newline at end of file diff --git a/armarium_app/app/templates/home.html b/armarium_app/app/templates/home.html new file mode 100644 index 0000000..708997e --- /dev/null +++ b/armarium_app/app/templates/home.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% block content %} +
+
+ + +

Circles indicate countries of origin of Robbins Collection manuscripts

+
+{% endblock %} \ No newline at end of file diff --git a/armarium_app/app/templates/home2.html b/armarium_app/app/templates/home2.html new file mode 100644 index 0000000..d117b48 --- /dev/null +++ b/armarium_app/app/templates/home2.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block content %} + +
+ + + + + + + + {% for record in recs %} + + + + {% if record.date2 %} + + {% else %} + + {% endif %} + + + {% endfor %} +
TitleShelfmarkDateLanguage
{{record.titles.filter_by(title_type='main').first()}}{{record.shelfmark}}{{record.date1}}-{{record.date2}}{{record.date1}}{{record.language}}
+
+{% endblock %} + + diff --git a/armarium_app/app/templates/msview.html b/armarium_app/app/templates/msview.html new file mode 100644 index 0000000..846f3fd --- /dev/null +++ b/armarium_app/app/templates/msview.html @@ -0,0 +1,238 @@ +{% extends "base.html" %} +{% block content %} + +

Robbins MS {{ ms.id }} - {{ ms.titles.filter_by(title_type='main').first() }}

+
+ + +{% if ms.titles.filter(title_type in['uniform', 'varying', 'secundo']) %} + + {% if ms.titles.filter_by(title_type='uniform').first() %} +

Uniform Title: {{ ms.titles.filter_by(title_type='uniform').first() }}

+
+ {% endif %} + + {% if ms.titles.filter_by(title_type='secundo').first() %} +

Secundo folio: {{ ms.titles.filter_by(title_type='secundo').first() }}

+
+ {% endif %} + + + {% if ms.titles.filter_by(title_type='varying') %} +

Variations of Title: +

    + {% for alt_title in ms.titles.filter_by(title_type='varying') %} +
  • {{ alt_title }}
  • + + {% endfor %} +
+ {% endif %} +{% endif %} + +{% if ms.datetype == 's' %} + {% if ms.datecertain == True %} +

Date: {{ ms.date1 }}

+ {% else %} +

Date: ca. {{ ms.date1 }}

+ + {% endif %} + +{% elif ms.datetype in ['k','q','i'] %} + +

Dates: between {{ms.date1}} and {{ms.date2}}

+ +{% else %} + +

Dates: {{ms.date1}}-{{ms.date2}}

+ +{% endif %} + +

Language: {{ ms.language }}

+ +{% if ms.publisher %} +

Published by: {{ ms.publisher }}

+{% endif %} + +{% if ms.places|length() > 1 %} +

Places of Origin:

+{% else %} +

Place of Origin:

+{% endif %} +{% for place in ms.places %} +{{ place.place_name }} +{% endfor %} + +{% if ms.watermarks|length() > 0 %} +

Watermarks:

+{% for wm in ms.watermarks %} +Briquet {{ wm.id }} "{{ wm.name }}" +{% endfor %} +{% endif %} + +{% if ms.summary %} +

Summary

+

{{ ms.summary }}

+{% endif %} + +{% if ms.ownership_history %} +

Ownership History

+

{{ ms.ownership_history }}

+{% endif %} + +

Number of Volumes: {{ ms.num_volumes }}

+ +{% for volume in ms.volumes %} + + +

Material: {{ volume.support }}

+ +

Extent: {{ volume.extent }} {{volume.extent_unit }}

+ +

Dimensions:

+
    +{% if volume.leaf_height and volume.leaf_width %} +
  • Support dimensions: {{volume.leaf_height}} x {{ volume.leaf_width }} {{volume.size_unit}}
  • +{% endif %} + +{% if volume.written_height and volume.written_width %} +
  • Written area: {{volume.written_height}} x {{volume.written_width}} {{volume.size_unit}}
  • +{% endif %} + +{% if volume.bound_height and volume.bound_width %} +
  • Bound to {{volume.bound_height}} x {{volume.bound_width}} {{volume.size_unit}}
  • +{% endif %} +
+ +{% if volume.quire_register %} +

Register of Quires: {{ volume.quire_register }}

+{% endif %} + +{% if volume.phys_arrangement %} +

Arrangement: {{ volume.phys_arrangement }}

+{% endif %} + +{% endfor %} +
+ + +{% if ms.volumes.first() %} +

Contents

+{% endif %} + +{% for volume in ms.volumes %} + +{% for textitem in volume.contents %} + + + + + + +{% endfor %} +
{{ textitem.fol_start_num }}{{ textitem.fol_start_side }} + {% if textitem.fol_end_num != None %} + - {{ textitem.fol_end_num }} + {% endif %} + {% if textitem.fol_end_side != None %} + {{ textitem.fol_end_side }} + {% endif %} + {{ textitem.text }}
+ +{% endfor %} + + +
+
+ + + +
+
+ + + + + + +{% endblock %} \ No newline at end of file diff --git a/armarium_app/app/templates/personlist.html b/armarium_app/app/templates/personlist.html new file mode 100644 index 0000000..47ea338 --- /dev/null +++ b/armarium_app/app/templates/personlist.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} + +{% block content %} + +
+ + + + + + {% for person in people %} + + + + + {% endfor %} +
NameDates
+ {{person.name_display}} + + {% if person.numeration %} + {{ person.numeration }} + {% endif %} + + {% if person.title %} + , {{ person.title }} + {% endif %} + {{ person.year_1 }}-{{ person.year_2 }} +
+
+{% endblock %} + + diff --git a/armarium_app/app/templates/personview.html b/armarium_app/app/templates/personview.html new file mode 100644 index 0000000..857ac6b --- /dev/null +++ b/armarium_app/app/templates/personview.html @@ -0,0 +1,128 @@ +{% extends "base.html" %} +{% block content %} + +

{{person.name_display }} + {% if person.numeration %} + {{ person.numeration }} + {% endif %} + + {% if person.title %} + , {{ person.title }} + {% endif %} + + {% if person.fuller %} + ({{ person.fuller }}) + {% endif %} +

+
+{%if (person.year_1 == None) and (person.year_2 == None) %} +{% elif person.datetype == 'life' %} + {%if (person.year_1 != None) and (person.year_2 == None) %} +

({{ person.year_1 }}-)

+ {% elif (person.year_1 == None) and (person.year_2 != None) %} +

(-{{ person.year_2 }})

+ {% endif %} +{% elif person.datetype =='approx' %} + {%if (person.year_1 != None) and (person.year_2 == None) %} +

(c.{{ person.year_1 }}-)

+ {% elif (person.year_1 == None) and (person.year_2 != None) %} +

(c. -{{ person.year_2 }})

+ {% endif %} +{% elif person.datetype =='profess' %} + {%if (person.year_1 != None) and (person.year_2 == None) %} +

(active {{ person.year_1 }}-)

+ {% elif (person.year_1 == None) and (person.year_2 != None) %} +

(active -{{ person.year_2 }})

+ {% endif %} +{% elif person.datetype == 'century' %} + {% if year_2 %} +

({{ person.year_1/100 }}-{{ person.year_2/100 }} centuries)

+ {% else %} +

({{ person.year_1/100 }} century)

+ {% endif %} +{% endif %} + +
+ + + + + + + + +
+ +
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/armarium_app/app/templates/placelist.html b/armarium_app/app/templates/placelist.html new file mode 100644 index 0000000..c283481 --- /dev/null +++ b/armarium_app/app/templates/placelist.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + +{% block content %} + +
+ + + + + + {% for record in recs %} + + + + + {% endfor %} +
NameRecords
{{record.place_name}}{{ record.mss.count()}}
+
+{% endblock %} + + diff --git a/armarium_app/app/templates/placeview.html b/armarium_app/app/templates/placeview.html new file mode 100644 index 0000000..d40df7b --- /dev/null +++ b/armarium_app/app/templates/placeview.html @@ -0,0 +1,123 @@ +{% extends "base.html" %} +{% block content %} + +

{{ location.place_name }}

+
+ +
+ + + + + + {% for ms in location.mss %} + + + + + {% endfor %} +
ManuscriptTitle
{{ ms.shelfmark }}{{ ms.titles.filter_by(title_type='main').first() }}
+
+ +
+
+ + +
+
+ +
+ + +
+
+ + + + +{% endblock %} \ No newline at end of file diff --git a/armarium_app/app/templates/wmlist.html b/armarium_app/app/templates/wmlist.html new file mode 100644 index 0000000..554fe84 --- /dev/null +++ b/armarium_app/app/templates/wmlist.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% block content %} + +
+

This page lists watermarks occurring in Robbins Collection manuscripts, organized according to the categories of Briquet's Les Filigranes.

+ +
+ + {% for wmtuple in recs %} + + + + {% for wminstance in wmtuple[1] %} + + + + {% endfor %} + {% endfor %} + +
{{ wmtuple[0].name }}
{{wminstance.id}}
+
+{% endblock %} + + diff --git a/armarium_app/app/templates/wmview.html b/armarium_app/app/templates/wmview.html new file mode 100644 index 0000000..878da7c --- /dev/null +++ b/armarium_app/app/templates/wmview.html @@ -0,0 +1,105 @@ +{% extends "base.html" %} +{% block content %} + +

Watermark Briquet {{ mainwm.id }}, {{ mainwm.name }}

+
+

View this watermark (external link to Briquet Online at the Austrian Academy of Sciences and Paris Laboratory for Western Medieval Studies)

+
+

Robbins manuscripts in which this watermark appears:

+ + + + + + +{% for ms in mainwm.mss %} + + + + + +{% endfor %} + + +
MSTitleOrigin
{{ ms.shelfmark }} {{ ms.titles.filter_by(title_type='main').first() }} + {% for place in ms.places %} + {{ place.place_name }}, + {% endfor %} +
+ + +
+ +
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/armarium_app/app/trial_II160119.json b/armarium_app/app/trial_II160119.json new file mode 100644 index 0000000..8935858 --- /dev/null +++ b/armarium_app/app/trial_II160119.json @@ -0,0 +1 @@ +{"RobbinsMS21": {"001": ["06-B3186"], "245 10": ["[Consilium on the last will and testament of Am\u00e9d\u00e9e III, Count of Geneva]"], "505 0": ["Fol. 1r-3v: \"[dedication] In nomine domini mei Ihesu Christi ac eius santissime matris virginis gloriose totiusque celestis curie amen [text] Procedam conclusione sive argumentis quia tempus occupationes agendorum mei communis non patiuntur viam (?) disputationis...Concludo ergo dominum Amadeum non potuisse detrahere trebellianicam [----] in eius hereditate non repereri...Deo gratias amen.\""], "520": ["The document is a consilium on the last will and testament of Am\u00e9d\u00e9e III, Count of Geneva from 1320 to 1367, and on matters pertaining to the succession of the House of Geneva. Am\u00e9d\u00e9e, married to Mathilde de Boulogne on 15 February 1334, had ten children. Of these, the document mentions four male children and heirs to the county: Aimon (later Aimon III, Count of Geneva, March-August 1367), Am\u00e9d\u00e9e (later Am\u00e9d\u00e9e IV, Count of Geneva 1367-1369), Jean or Janus (Count of Geneva 1369-1370) - included twice probably by mistake - and Pierre (Count of Geneva 1370- 1394) - here mentioned as the last born. Robert, whose election as Pope Clement VII in 1378 in Avignon marked the beginning of the Great Schism, is not included in the initial list of sons, but is mentioned further on in the text (e.g. fol. 2r). Similarly, of the five daughters (Marie, Jeanne, Blanche, Yolande, and Catherine) only four are mentioned, the fourth as the last born."], "530": ["Selected digital images available on Digital Scriptorium."], "852 8": ["CUL|bRBCAG|hRobbins MS 21|xCIN=JKN"], "008": ["060711q14001499it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, July 2006."], "300": ["|3Original: |a4 leaves :|bpaper ;|c292 x 223 ( 244 x 149) mm bound to 292 x 228 mm.", "|3Copy: |a1 microfilm reel (Robbins MS 21)"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (watermark similar to Briquet \"Arc,\" 799), fol. 4; 1\u2074.", "Layout: Written in 52 long lines.", "Script: Written in a gothic cursive script by one hand.", "Binding: Bound in grey cardboard and stored in a four-flap enclosure with stiff outer boards. A title on the front cover, written in an early 20th cent. hand, reads \"\u00c9criture en droit concernant le testament d'Am\u00e9 Comte de Gen\u00e8ve, mort en 1312,\" has been crossed out in pencil and replaced with \"Amadeus. Resolutio dubiorum.\" Small label in the left-hand corner of cover, with date: \"1919.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 21."], "090 8": ["Robbins MS 21"], "260": ["[Italy,|c14--]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=112;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS131": {"001": ["06-B3883"], "260": ["[Austria?,|cbetween 1550 and 1597]"], "505 0": ["1. Fol. 1r-170v: \"[title] De iudiciis privatis [text] Consilium et institutum nobis formam et ritum sive ordinem iudiciorum privatorum explicare...De venditione bonorum post missionem (?) in bona debitoria an sit ignominiosa explicatum supra, etc. [rubr.] Finis tractatus de iudiciis\" ; fol. 171r-185v: blank."], "505 8": ["2. Fol. 186r-261r: \"[title] Tractatus de appellationibus aliisque iuris remediis earum cognatis et affinibus [text] Caput primum. De tractatione et occasione huius argumenti. Explicamus in ista pridem ea quae ad primum iudicium...ex authoritate sentiarum vel consensu partium electi [----] ille locus emendandus mihi videtur [rubr.] Finis tractatus huius de appellationibus\" ; fol. 261v-275r: blank.", "3. Fol. 276v-339r: \"[text] Quia de hoc argumento multus in iure extat...qua de re est super ubi [---] successio [---] [rubr.] Finis tractatus de renunciantibus. Ultimo Februarii anno 97 (=1597?)"], "520": ["Three treatises, each on a different legal topic. Some water staining."], "852 8": ["CUL|bRBCAG|hRobbins MS 131|xCIN=JKN"], "008": ["060815q15501597au ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 03": ["De iudiciis privatis ;|bTractatus de appellationibus aliisque iuris remediis earum cognatis et affinibus ; De renuncia[n]tibus."], "546": ["Latin."], "583": ["Cataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "300": ["358 leaves :|bpaper ;|c196 x 153 (160 x 110) mm bound to 209 x 178 mm."], "561": ["Ownership inscription on front pastedown reads \"Joannis Baptisto Friderici...Salisburge,\" partially torn away. Library stamp in bottom left corner on fol. 1r from the Czerninsche Bibliothek. Label on spine, presumably from a library, bears the number \"5001.\""], "500": ["Ms. codex.", "Title from title pages (fol. 1r, 186r) and from closing rubrics (fol. 170v, 261r and", "Collation: Paper (watermark similar, but not identical to, Briquet \"Cerf,\" 3334), fol. vi + 358 ; 1-23\u2078 24\u00b9\u2070 25-41\u2078 42\u00b9\u00b2 43\u2078 44\u00b9\u2070 45\u2076.", "Layout: Written in up to 28 long lines.", "Script: Written in a cursive script by two hands. The first hand wrote the entire first tract (fol. 1r-170v) and the second half of the second tract (fol. 229v-261r). The second hand wrote the first half of the second tract (fol. 186r-229r) and the entire third tract (fol. 276v-339r). Early marginalia in ink in a third hand, cropped on fol. 189r-265v.", "Binding: Contemporary pigskin over pasteboard, slightly cockled and loose along fore and lower edge. Covers blind- stamped with an intricate pattern: central panel on the upper cover depicts Justitia with sword and scales, the rear cover depicts a suicidal Lucretia; both figures standing within a window frame which is itself surrounded by rectangular borders infilled with floral and geometric patterns. Four raised bands. Lining under front pastedown is a page from a printed book, exposed because of partially torn away ownership inscription. Trace of cloth ties on fore edge (now lacking).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 131."], "090 8": ["Robbins MS 131"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS31": {"001": ["ocn247626931"], "245 10": ["D[omini] Roderici Ximenez Navarri Archiepiscopo Toletani Rerum in Hispania gestarum libri IX :|bAd vetera exemplaria comparati ut nunc primum editi videri queant / |cOpera et studio Andreae Schotti."], "040": ["BOL|eamremm|cBOL"], "520": ["The text--including the dedication, colophon, marginal notes, introductory formula for each book (\"Roderici Archiepiscopi Toletani de rebus Hispaniae liber...\"), and the final ornamental flourish at the end of Book 6--was copied from the printed edition of Bishop Rodrigo de Rada's \"Rerum in Hispania gestarum\" edited by Andreas Schott. Parts of the work were printed in 1545 and 1579. Schott's edition was published in 1603-1608 as \"Hispaniae illustratae seu Rerum urbimque Hispaniae, Lusitaniae, Aethiopiae et Indiae scriptores varii\" (see bibliography)."], "260": ["Spain,|c[between 1750 and 1799]"], "099": ["Robbins MS 31"], "581": ["Domini Roderici Ximenez Navarri Archiepiscopi Toletani Rerum in Hispania gestarum libri IX. Ad vetera Exemplaria Comparati, ut nunc primum editi videri queant. Accesit Gothorum, Arabum et Romanorum Historia nunquam ante hac edita. Opera & studio Andreae Schotti, in Schottus, Andreas, Hispaniae illustratae seu Rerum urbimque Hispaniae, Lusitaniae, Aethiopiae et Indiae scriptores varii... 4 vols. (Francofurti: apud C. Marnium & haeredes Iohannis Aubrii, 1603-08), 2:25-148."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Philipps (his no. 2237)."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper, fol. 174 (manuscript is paginated 1-325 starting at beginning of text, fol. 9r, skipping title page and table of contents); 1\u00b2 2\u2076 3-18\u00b9\u2070 19\u2076 (last quire has two nested bifolia inside a third bifolium; last fol. is pastedown); catchwords throughout, not at consistent intervals.", "Layout: Written in 30 long lines.", "Script: Written in a very neat cursive script by one hand.", "Decoration: Author's name on title page (fol. 2r), first line of dedication (fol. 9r), and the heading book one \"Liber Primus\" (fol. 10v) written in decorated capitals; remainder of title page written in calligraphic script.", "Binding: Brown paper binding over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 31."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "300": ["|3Original:|a174 leaves :|bpaper ;|c299 x 205 (241 x 160) mm bound to 313 x 217 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-5) and positive (Robbins MS 31)"], "650 00": ["Spain|xHistory|yGothic period, 414-711."], "008": ["080910q17501799sp 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "240 10": ["Historia de rebus Hispanie."], "100 1": ["Jim\u00e9nez de Rada, Rodrigo,|dca. 1170-1247."], "546": ["Latin."], "003": ["OCoLC"], "700 1": ["Schottus, Andreas,|d1552-1629.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "005": ["20080910061426.0"], "505 0": ["Fol. 2r: Title page -- fol. 3r-5v: Table of contents -- fol. 6r-8v: Blank -- fol. 9r-10r: Dedication -- fol. 10v- 24r: \"Liber primus. De fundamento huius historia (sic)\" -- fol. 24r-42v: \"Liber secundus. Scismate in Athanaricum et Fridigernum et haeresi Ariana\" -- fol. 43r-65r: \"Liber tertius. De Regno Bambae\" -- fol. 65v-84v: \"Liber quartus. De rebellione Pelagii contra Arabes et de sorore sua et regno eius\" -- fol. 84v-101v: \"Liber quintus. De Frolia et indicibus\" -- fol. 102r-126v: \"Liber sextus. De Rege Ranimiro et genealogia regum Aragoniae et de captione Oscae\" -- fol. 126v-148v: \"Liber septimus. De separatione Regis Aragonum et Reginae Castellae\" -- fol. 149r-161v: \"Liber octavus. De adventu regum ad urbem regum\" -- fol. 161v-173v: \"Liber nonus. De regno Regis Enrici et quod fuit comiti Alvaro deputatus.\""], "035": ["(OCoLC)247626931"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS49": {"001": ["ocm84553194"], "260": ["[France :|bs.n.,|c17--?]"], "040": ["CUY|cCUY"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "650 0": ["Consanguinity (Canon law)"], "300": ["|3Original:|a2 leaves :|bpaper ;|c316 x 205 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-47) and positive (Robbins MS 49)"], "008": ["861209q17001799fr 000 0 und d"], "099": ["Robbins MS 49"], "245 00": ["Manuscript on procedure to obtain a papal dispensation for marriage of uncle and niece."], "003": ["OCoLC"], "005": ["20080129054118.0"], "035": ["(OCoLC)84553194"], "LEADER": ["00000cam 2200000Li 4500"]}, "RobbinsMS56": {"001": ["ocn503588761"], "245 10": ["[Papal registry of the Sacrae Congregationis Immunitatis Ecclesiae]"], "040": ["BOL|eamremm|cBOL"], "520": ["Documents concerning the application of ecclesiastical immunities and privileges in a variety of Italian cities, many of which are in the Papal States. Most documents dated 1639, thirteen years after Urban VIII's Bull \"Inscrutabile\" (22 June 1626), in which the Congregatio Immunitatis was established."], "510 4": ["Phillips, T. Cat ms.|c5351."], "110 2": ["Catholic Church.|bCongregatio Jurisdictionis et Immunitatis Ecclesiasticae."], "260": ["Italy,|c[after 1621]"], "099": ["Robbins MS 56"], "581": ["Pietro Andrea Ricci, Synopsis Decreta, et Resolvtiones Sac. Congr. Immunitatis super controuersijs Iurisdictionalibus (Praeneste: Typis Barberinis apud Antonium Ruzzolum, 1708)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Library stamp \"Bibliot. H. F. 3770\" on fol. 1r. Manuscript was once in the collection of Sir Thomas Phillips (his no. 5351)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Written in long lines in various hands; contemporary marginal notes throughout.", "Script: Written in cursive script of varying levels of legibility.", "Bound in limp vellum over pasteboard; remains of two leather ties on foredge, now lacking. \"LXII\" written on front cover. Title on spine reads [unclear]tion S. Cong.nis Immnunit. Eccle.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 56."], "300": ["|3Original:|a230 leaves :|bpaper ;|c280 x 210 mm bound to 295 x 220 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-54) and positive (Robbins MS 56)"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "008": ["100205q16201640it 000 0 ita d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Pamela Diaz, December 2009."], "546": ["Mostly in Italian; some Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100205053135.0"], "505 0": ["Fol. 1r-218v: Papal Registry, Sacrae Congregationis Immunitatis Ponente, mostly organized by Papal state -- fol 219r-230v: Documents on feast days, the authority of courts, and the damnation of former heretics."], "035": ["(OCoLC)503588761"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS273": {"001": ["ocm84650587"], "245 10": ["[Kise Kavod :|ba commentary on the minor tractates Kalah, Evel Rabati and Derekh Erets]"], "040": ["CUL|eamremm|cCUY|dBOL"], "520": ["The work contained in the manuscript is a commentary written by Moses Judah Abbas on the minor tractates Kalah, Soferim, Evel Rabati (this one until chapter 13) and Derekh Erets. In the last-named tractate chapters iii and iv are written as one chapter. It is also incomplete, and contains only about a third of chapter iv. Lacuna after fol. 1. An existing description of the manuscripts says that this is an autograph by the author, although no evidence was found in the manuscript. Conservation treatment report in in manuscript file, along with notes on content, catchwords, and missing pages by Ruth Haber."], "710 2": ["Jews' College (London, England).|bLibrary.|4asn|4fmo|5CUL."], "510 4": ["Hirschfeld, Hartwig. Descriptive catalogue of hebrew manuscripts of the Montefiore Library, The Jewish Quarterly Review vol. 14, n. 1,|cp. 173.", "Higger, Michael. Masekhtot Kalah: ve-hen masekhet Kalah, masekhet Kalah rabati (Jerusalem : Makor, 1970),|cp. 41."], "260": ["|c[16--]"], "099": ["Robbins MS 273"], "100 1": ["Abbas, Moses Judah ben Mein,|dca. 1601-1671."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM ONLY:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["On fol. 81v, there is a black stamp which reads: \"Yeshivat Ohel Mosheh, Ramsgate\", which refers to the Spanish- Portuguese Jewish seminary at Ramsgate, England: this manuscript used to belong to the library of Moses Montefiore, who lived in Ramsgate and had a library there. In addition, on inside back cover and on the spine, there are two identical bookplates which read: \"Montefiore MS. 64 Ha No. 346 Library\". The letters \"Ha.\" and the numbers refer to the manuscripts from the Solomon Halberstan collection, which used to be a part of the Montefiore Library. This manuscript, together with the bulk of the Montefiore library, was later transferred to Jews' College, London. In the manuscript was found a torn strip from a French newspaper (possibly a bookmark by a former owner), together with a piece of paper with a short note written in pencil, 20th century, which reads: \"Bene Dio (?) [...] 26 Mai\". An existing description names one more former owner, Hayyim Joseph David Azulai, but no evidence was found in the manuscript."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. 81; 1\u2076 (lacks fol. 6) 2-5\u2078 (fol. 40 is missing or misnumbered) 6\u00b2 7-10\u2078 11\u2076 plus one bifolium inserted. Catchwords in the bottom margins, by the hand of the scribe.", "Layout: Written in up to 36 long lines, with interlinear glosses. Not ruled. Most folios have tabs created from the folio itself (tabs were formed before the book was trimmed by cutting above and below existing marginal notations and folding inward so that the fold would not be cut with the fore-edge). Occasional marginal notes.", "Written in semicursive Sefardic masheit script, by one hand.", "Binding: Currently bound in quarter-linen with marbled paper sides. Previous 18th-century brown marbled paper binding over pasteboard, with flyleaves in light blue paper and small traces of red seals on the front and on the back cover, was detached and is now housed in the manuscript file.", "Origin: Written in the 17th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 273."], "035": ["(OCoLC)84650587"], "008": ["060803s16uu xx 000 0 heb d"], "583": ["|zCataloged from existing description and in hand by Saul M. Friedman and Silvia Donghi, August 2006."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "546": ["Hebrew."], "003": ["OCoLC"], "700 1": ["Montefiore, Moses,|cSir,|d1784-1885.|4asn|4fmo|5CUL.", "Halbersh\u1e6dam, Avraham Shalom,|d1855-1940.|4asn|4fmo|5CUL."], "005": ["20080714033757.0"], "300": ["|3Original:|a81 leaves :|bpaper ;|c210 x 150 (160 x 120) mm bound to 220 x 160.", "|3Copy:|a1 microfilm reel :|bnegative (MN 03-95) and positive (Robbins MS 273)"], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS11": {"001": ["06-B4008"], "245 10": ["[Summa de casibus poenitentiae cum apparatu Guilelmi Redonensis] ;|bSumma de matrimonio [cum apparatu Guilelmi Redonensis]"], "505 0": ["Fol. 1r-181r: \"[rubr.] Incipit summa magistri Raymundi. [text] Quoniam ut ait Ieronimus secunda tabula post naufragium est culpam confiteri simpliciter ne imperitia ministrantis predictam tabulam submergi contingat alii naufragantes...mereamur audire in die Domini dulcem et ineffabilem iocunditatis vocem illam: Venite benedicti, precipite regnum. Amen.\""], "505 8": ["Fol. 181r-208v: [rubr.] Incipit prologus magistri Raymundi in Summa sua de matrimonio. [text] Quoniam frequenter in foro penitentiali dubitationes circa matrimonio immo etiam interdum...in rebus dotalibus factas puta quia domum refeci (?) potest retinere v. c.(?) de impensis in rebus dotalibus f. l. (?) idest voluntarias vero perdidit sicut ibi dicitur//\""], "520": ["This manuscript contains the two major works by Raymond of Pe\u00f1afort: the Summa de casibus poenitentiae and the Summa de matrimonio (the latter is here incomplete). The main text is surrounded by the apparatus written by Guillaume de Rennes. This manuscript is not a working copy, since it is very tidy and does not have marginal notes. On the flyleaves, a late 15th century hand provided an index for the manuscript, and listed the chapter headings matched with the page numbers. Bottom quarter of fol. 65 cut out; fol. 163 torn and mended."], "530": ["Selected digital images available in Digital Scriptorium."], "100 0": ["Raymond,|cof Pe\u00f1afort, Saint,|d1175?-1275."], "852 8": ["CUL|bRBCAG|hRobbins MS 11|xCIN=JKN"], "700 0": ["Guillaume,|cde Rennes."], "260": ["[Italy,|cbetween 1325 and 1350]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio:|aprohibita quia symonica"], "546": ["Latin."], "008": ["060822q13251350it ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "300": ["|3Original: |a208 leaves :|bparchment ;|c260 x 190 (150 x 110) mm bound to 270 x 195 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-19) and positive (Robbins MS 11)"], "561": ["The manuscript once belonged to Francisco of Pozzuoli, former rector, who in 1496 donated it to the church of St. John the Baptist in Busto Arsizio (northern Italy): on flyleaf ir there is an ownership note which reads: \"Iste liber est ecclesie Sancti Johannis baptiste burgi de Bustiarsiti et largitus fuit per venerabilem dominum presbiterum Francischolum de [...] puteo olim rectorem sancte ecclesie et presentatus fuit per dominum presbiterum Johannem de Bernardis die XX aprilis 1496 in presentia dominorum presbiterorum Michaelis de Bossys Conradi et Bernardinis Amborum de Crispis [...] rectorum sancte ecclesie;\" on back flyleaf iv another ownership notes reads: \"Summa ista Raymondi largita fuit ecclesie Johannis Baptiste loci de Bustiarsitio per venerabilem virum dominum presbiterum Frescholum de Puteo et presentata fuit per dominum presbiterum Johannem de Bernardis habitantem in Bianate die XX aprilis 1496.\" Three more rubbed ownership notes are still visible, but no longer legible, on back flyleaves Ir (two rubbed notes, oe in the upper margin and one on the bottom margin) and iiv. On flyleaf ir, there is the number \"14\" written in pencil by a 20th century hand."], "500": ["Ms. codex.", "Fol. 1r-181r: title supplied by cataloger; fol. 181r-208v: title from the opening rubric.", "Collation:Parchment, fol. i-iii (modern paper) + iv-v (parchment) + 208 + i-11 (parchment) + iii-v (modern paper); 1-11\u00b9\u00b2 12\u00b9\u2070 13-14\u00b9\u00b2 15\u00b9\u2070 16-17\u00b9\u00b2 18\u2078. Catchwords in the middle of the bottom margin, sometimes decorated with pen strokes. Contemporary foliation in arabic numerals in the upper margin, in the right corner. Modern 20th century foliation in pencil in the bottom margin. No quire numbering is visible.", "Layout: The text is written in 32 long lines; the marginal gloss surrounds the main text, both in the lateral margins and in the bottom margin (up to 57 lines for each page). Ruled in lead.", "Script: Written in a textualis libraria script, by one hand, below top line.", "Decoration: Fol. 1v, a large 5-lines red and blue pen flourishing initial. Fol. 1r, 3-line blue and red penworked initial. Many 2-lines blue and red penworked initials. Red rubrics and alternating red and blue paragraph marks. Red and blue running titles on the upper margin. Some \"lemmata\" underlined in red throughout the text.", "Binding: Quarter bound in brown leather over pasteboard; title gilt tooled on spine: \"Summa Rymundi sec. XIV\". Covered in printed brown paper.", "Origin: Written in Italy in the 14th century, possibly during the second quarter of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 11."], "LEADER": ["00000ctm 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=106;fullview=yes"], "090 8": ["Robbins MS 11"]}, "RobbinsMS134": {"001": ["ocm84650515"], "245 10": ["Tractatus de auctoritate Rotae."], "040": ["CUL|eamremm|cCUY|dOCLCG|dBOL"], "520": ["Legal treatise by Jacopo Antonio Marta on the authority of the Sacra Rota."], "300": ["52 leaves :|bpaper ;|c289 x 226 (243 x 155) mm bound to 297 x 220 mm."], "510 4": ["Phillipps, T. Cat. ms.,|c7543"], "260": ["Italy,|cbetween 1588 and 1600."], "099": ["Robbins MS 134"], "100 1": ["Marta, Giacomo Antonio,|d1559-1629."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Once in the collection of Phillipps (his no. 7543)."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper (similar but not identical to Briquet, \"Oiseau\" 12224), fol. ii (modern paper) + 52 + ii (modern paper); 1-4\u2076 5\u2074 6\u00b9\u2070 7\u2074 8\u00b2 9\u2078; catchwords at the end of each quire except for quires 6, 8, and 9.", "Layout: Written in 26 long lines.", "Script: Written in a cursive script by one hand.", "Binding: The manuscript came into Robbins with no binding. Conservation treatment included adding new endpapers, sewing into a new wrapper (using existing sewing holes) and covering with modern limp vellum.", "Origin: Written in Italy after 1588 and before 1600 (the script seems to be a 16th century one). Original bookdealer description says this is possibly an autograph manuscript, although no conclusive markings are present.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 134."], "035": ["(OCoLC)84650515"], "852 8": ["CUL|bRBCAG|hRobbins MS 134|xCIN=JKN"], "008": ["060725q15881600it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart, Jennifer K. Nelson, and Federico Ruggero, October 2008."], "546": ["Latin."], "003": ["OCoLC"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "005": ["20081031125958.0"], "505 0": ["Dedicatory letter and Capita tractatus (fol. 1rv) -- Cap. 1: De initio domini et iurisdictionis (fol. 2v-9r) -- Cap. 2: De origine et progressu reverendissimorum Patrum auditorum Sacri Palatii (fol. 9r-14r) -- Cap. 3 (mistakenly numbered chapter 4): Utrum potestas Patrum Sacri Palatii sit ordinaria vel delegata (fol. 14v- 21v) - - Cap. 4: De ordine reddendi vota in causis (fol. 21v-27r) -- fol. 27v: blank -- Cap. 5: Utrum decisiones Rotae faciant ius (fol. 28r-35r) -- Cap. 6: De Titulis et praecedentiis dignitatum Romanae Curiae (35r-41v) -- Cap. 7: Auditorandus (42r-49v) -- fol. 50r-51v: blank."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=78;fullview=yes"], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS255": {"001": ["ocn759438599"], "260": ["France,|cbetween 1390-1672"], "040": ["BOL|eamremm|cBOL|dBOL"], "505 8": ["Volume II (1390- ): Fol. 1r-25r: Documents, 1390-1443 -- fol. 26r-32v: \"Table du present aveu rendu par Robin de Malaunay mari de la petite fille de Pierre d'Eaudane Seigneur des Brosses Bodereau [---] Louis Delacroix Seigneur de Rousseau vars 1449. L'on mettera d'abord les cantons ensuitte sera la table personelle en 1757\" -- fol. 33r-34v: \"Table personelle de l'aveu de 1443 des Brosses Bodereau rendu \u00e0 Rosseau depuis l'art. 1 jusqu'a l'art. 140 les devoirs sont du et au terme d'Angevine et depuis l'art. 141 jusqu'a la fin 187 ils sont payables \u00e0 la St. Michel [----]\" -- fol. 36r-432v: Documents, 1456-1702 -- fol. 37r-38v: Donation of Grand Lunel by Jean de Roux and Miss Le Clerc, to the son of the latter, Jean de Saint- M\u00e9laine (25 November 1474) -- fol. 39r: Lease of Grand Lunel by Jean de Saint-M\u00e9laine to Gilles LeClerc (3 April 1483) -- fol. 127r: Option of distribution of Grand Lunel (25 July 1518) -- 433r-453v (unnumbered): \"Table r\u00e9elle du Tom. I des contrats d'acquest faits dans la mouvance des fiefs et Seigneuries des Narc\u00e9 et des Brosses Bodereau ensemble de quelque procedures\" -- fol. 454r-461r (unnumbered): \"Table personelle du I Tom. des contrats d'acquest faits dans la mouvance des fiefs de Narc\u00e9 et des brosses Bodereau ensemble de quelque procedures.\""], "520": ["Set of notarized acts and procedural documents, including admissions, leases, donations, contracts, powers of attorney, distributions, and sales, from the fiefs and seigneuries of Narcay and des Brosses Bodereau. Documents cover 1390 to 1702 and were likely indexed and bound at a later date. Most documents have date and brief description (in French) written in upper left corner in later hand, and foliation in ink in upper right. Many documents mention the Aveline family. Remains of a wax seal visible on 243r."], "300": ["|3Original:|a2 v. (357, 461 leaves) :|bpaper ;|c305 x 195 bound to 334 x 208 mm ; 300 x 205 bound to 340 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS)"], "008": ["111102i13901672fr 000 0 lat d"], "099": ["Robbins MS 255"], "003": ["OCoLC"], "245 00": ["[Acts and documents from the fiefs and seigneuries of Narcay and des Brosses Bodereau]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Provenance: Folio 209r of volume I bears a tax stamp from the g\u00e9n\u00e9ralit\u00e9 de Tours."], "500": ["Collection of documents bound in two volumes.", "Title transcribed from fol. 334r of volume I and 443r of volume II.", "Binding: Speckled brown leather over pasteboard. Four bands on spine, five compartments. Title and border are blind-stamped on spine. Two green book ties. Front cover of volume I reads \"Cotte I (or J)\" and its spine reads \"NARCE ET LES BROSSES DECLARATION\" and \"TOME I.\" Front cover of volume II reads \"Cotte h,\" and its spine reads \"LES BROSSES CONTRATS\" and \"TOME II.\" Volume II has traces of gold in stamped border on spine. Volume II contains some very large parchment documents that have been folded to fit. The most recent document is from 1702, and the documents were likely indexed and bound at a later date.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 255."], "583": ["|zCataloged in hand by Nicolas Laurent-Bonne and Ana E. Enriquez, October 2011."], "005": ["20111102030421.0"], "LEADER": ["00000ntc 2200000Ia 4500"], "035": ["(OCoLC)759438599"], "546": ["Latin and French."], "505 2": ["Volume I (1410-1672): Fol. 1r-262v: Documents in Latin and French, arranged in chronological order from 1410 to 1672 -- fol. 179, 181, and 183: Printed forms in French, possibly leases, filled out in ink, 1667 -- fol. 264r: \"S'ensuivent les declarations du fief de Narc\u00e9 relevant \u00e0 foy et hommage simple de Briancon\" -- fol. 265r-333v: Documents relating to Narc\u00e9 and Brian\u00e7on,1548-1667 -- fol. 332: Printed form in French, same as above -- fol. 334r- 349v: \"Table r\u00e9elle de I. TOM. des declarations des fiefs et Seigneurie de Narcay et des Brosses Bodereau depuis 1410 jusqu'au 1672. O\u00f9 l'on trouvera toutes celles re[--] au fief de Narc\u00e9 aux letters L. et N.\" -- fol. 350r.-357v. : \"Table personnelle du tome I des declarations des fiefs et Seigneurie de Narc\u00e9 et des Brosses Bodereau depuis 1410 jusqu'au 1672.\""]}, "RobbinsMS81": {"001": ["06-B4381"], "245 10": ["[Summa Antonina]"], "505 0": ["Fol. 1r-235v: \"[rubr.] Prima pars. [text] De peccato igitur tractabitur in ista parte in generali...fiducia quam habent in Domino non recedunt, non etiam male faciunt.\""], "520": ["Extensive marginal notes and corrections (both marginal and interlinear) by the hand of the scribe and by the hand of a contemporary corrector, in Latin and Italian; a few examples of the latter are those appearing on fol. 34r (\"li Iudei e li Greci errano in questo\"), fol. 93r (\"nullo non po iudicare se ipso\"), fol. 127r (\"lo popolo iudayco\"), fol. 137v (\"Quando lo marito non pote aver la moglie etc.\"), fol. 181v (\"Quando alcuno volesse intrar a la religion\"). On fol. 174r there is a note that seems wriiten in Spanish language: \"Como in Franza si impegnao no hentado co homo in clastro.\""], "100 0": ["Antoninus,|cSaint, Archbishop of Florence,|d1389-1459."], "852 8": ["CUL|bRBCAG|hRobbins MS 81|xCIN=JKN"], "246 2": ["|iSecundo folio :|aet universarum"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060908q14251450it ||||||||||||00|||lat|d"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a235 leaves :|bpaper ;|c282 x 194 (210 x 145) mm bound to 286 x 200 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 02-65) and positive (Robbins MS 81)"], "561": ["On the inside front cover, there are many notes in pencil, 20th century, both in English and Dutch. For example: \"Medieval hand. Summa S. Antonini ms. [...] ca. 1430\". The Dutch hand wrote a note related to the education of children. Many numbers written in pencil (previous call numbers or shelfmarks?): \"420022 - 4785/TR\", \"RZ RZ 210\".On the inside back cover, a 20th century hand wrote in pencil the number \"300427\"."], "500": ["Ms. codex.", "A title for the work contained in this manuscript is added twice on fol. 1r, in the lower and in the upper margin, once by a 16th century hand and once by an early 17th century hand.", "Collation: Paper, fol. i + 235; 1-29 \u2078 30\u2074\u207b\u00b9. Watermarks: on the flyleaf, there is an \"ancre\" enclosed in a circle and with a star at the bottom, not in Briquet; in the manuscript, the watermark resembles a \"lettre R\", not in Briquet. Contemporary foliation in Roman numerals, in the right upper corner. Catchwords by the hand of the scribe, in the middle of the lower margins on verso, sometimes decorated with black and red pen strokes. No contemporary quire signature is provided.", "Layout: Written in two columns, 44 lines for each column. Wide margins; frame ruled in dry point and lead. Prickings visible both in the outer margins (one row) and in the upper and lower margins.", "Script: Written in a cursiva libraria script: very tidy at the beginning of the codex, growing increasingly messy towards the end. The whole manuscript appears to be written by one hand.", "Decoration: Fol. 1r, a 5-line red initial. Red initials, mostly on 2 lines, throughout the text. Red rubrics, red paragraph signs and many initials in the text touched in red.", "Binding: Bound in vellum over pasteboard, 17th-18th century. Title on spine: \"Summa S. Antonini P.P.\"", "Origin: Written in Italy during the second quarter of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 81."], "090 8": ["Robbins MS 81"], "260": ["[Italy,|cbetween 1425 and 1450]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=50;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS250": {"001": ["06-B3629"], "245 10": ["Decretales: liber IV."], "505 0": ["Fol. 1r-48r: \"[rubr.] De sponsalibus et matrimoniis. [text] Non potatur sponsa descedere a sponsalibus...sequitur rubrica de desponsatione impuberum; fol. 48r-58r: \"[rubr.] Rubrica de desponsatione impuberum. [text] Continuatur hec rubrica ad presentem...inde sequitur rubrica de clandestina desponsatione; fol. 58rv: \"[rubr.] Rubrica de clandestina desponsatione. [text] Continuatur ad presens hoc orationem quod sepe matrimoniorum...plus creditur marito quam uxori."], "520": ["The manuscript is bound with an incunable: Stefano Costa, Rubricae de sententia excommunicationis interpretatio, printed in Pavia, Italy, by Antonius de Carcano, October 22nd 1483 (see GW 7810, IGI 3249). The incunable has several marginal notes in a 15th century cursive hand. The manuscript follows the incunable, and possibly the scribe is the same person who wrote the marginal notes of the incunable. Inserted and detached there is a sheet of paper, 100 x 190 mm, now numbered 1a, written in a very untidy and cursive notularis script, written in German by a 15th century hand. The manuscript is acephalous and incomplete."], "100 0": ["Gregory IX,|bPope,|cca. 1170-1241."], "852 8": ["CUL|bRBCAG|hRobbins MS 250|xCIN=JKN"], "008": ["060731q14751500it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "300": ["59 leaves :|bpaper ;|c395 x 290 (300 x 180) mm bound to 400 x 290 mm."], "561": ["Inside front cover, in the upper left corner, written in black ink by a 19th century hand there are the initials: \"B.d.\" and the number \"N. 4627\", followed by the number \"177\" deleted. Then the bottom margin reads:\"A.D.5. 312.\" written in pencil by a 20th century hand. On fol. Ir, red and golden bookplate: \"Ex libris Estelle Doheny\", 20th century."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (8-petal flower very close to Briquet 6612), fol. 59; 1\u00b9\u00b2 2-3\u00b9\u2070 (the second quire lacks fol. 3 and 4) 4\u00b9\u2074 5\u00b9\u2070 6\u2078 (lacks fol. 4-7).", "Layout: Written in two columns, 50-54 lines. Wide margins, occasional marginal notes. Frame ruled in dry point and lead. Catchwords in the middle of the bottom margin, by the hand of the scribe. Running titles in the middle of the upper margins, on recto.", "Script: Written in a cursiva libraria script, with many abbreviations. Chapters headings written in textualis libraria script.", "Binding: Contemporary quarter pigskin over wooden boards, blind-tooled with double fillets and small rosette tools; two brass fore-edge catches.", "Accompanying material: A 15th century leather bookmark is glued on fol. 21.", "Origin: Written in Pavia (see watermarks) during the last quarter of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 250."], "700 1": ["Doheny, Estelle,|d1875-1958.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 250"], "260": ["[Pavia,|cbetween 1475 and 1500]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS231": {"001": ["06-B3736"], "610 20": ["Catholic Church.|bPope (1513-1521 : Leo X)", "Universit\u00e9 de Paris."], "505 0": ["|gFol. 1r-7v.|tMemoire touchant le faict de l'abolition des eslections qui fut envoy\u00e9 a Rome -- |gFol. 8r-15r. |tInstruction bailles par le Roy Fran\u00e7ois premier pour [-- --] presenter au Pape...Instructiones nomine Christianissimi Francorum Regis sanctitati Domini nostri Pape presentanda... -- |gFol. 16r-19r.|tCoppie des article du Concordat d'entre le Pape et le Roy Fran\u00e7ois premier -- |gFol. 20r-46r.|tConcordat entre le Pape Leon X et le Roy Fran\u00e7ois premier. Concordata inter sanctissimum dominum nostrum Papam Leonem Decimum et Christianissimum dominum nostrum Regem Franciscum huius nominis primum -- |gFol. 47r-48r.|tS'ensuict ce que le Pape octroya au Roy treschrestien nostre souverain et naturel seigneur l'an 1515 a Boulogne ou nostredict seigneur f[-----] personne luy faire l'obeissance officiale -- |gFol. 49r-51r.|tLa revocation de la Pragmatique -- |gFol. 52r-81r. |tRemonstrances de la Cour de parlement au Roy Contenans les raisons qui ont meu ladicte Cour de ne publier le Concordat -- |gFol. 82r-86r.|tSecondes Remonstrances de La Cour de parlement au Roy contre Le Concordat -- |gFol. 87r -166v.|tMemoire dress\u00e9 par Monseigneur le Chancellier duprat pour monstrer les raisons et causes qui on meu le Roy de faire les concordatz avec le Pape Leon x.e pour servir de response aux remonstrances du parlement -- |gFol. 167r-175r.|tAddition faicte par le Chancelier duprat au memoire dress\u00e9 par luy pour la deffense du Concordat -- |gFol. 176r-179v|tRemonstrances faicte par le Roy...Chancellier [aux] Messieurs de La cour de parlement touchant la Pragmatique Sanction et autres matieres; Extrait des registres du parlement du 5. febvrier 1516 [=1517 N.S.] -- |gFol. 180r-187r.|tExtraict des Registres de Parlement Concernant ce que se passa a ladicte Cour sur l'anvoy du concordat anvoy\u00e9 par le Roy pour y estre verifi\u00e9 [beginning with 12 March 1517] -- |gFol. 187v. |tS'ensuict la requeste de l'Universit\u00e9 a Nosseigneurs de parlement -- |gFol. 187v-194r.|t[Registers beginning again with 26 March] -- |gFol. 195r-206r.|tProc\u00e9s verbal des Remonstrances faictes en la Cour de parlement au mois de Mars 1517sur la publicacion des Concordatz d'entre le Pape Leon x.e et le Roy Francois premier -- |gFol. 207r-215r. |tPlusieurs extraictz des registres de la Cour touchant le Concordat; Extraict des registres de parlement -- |gFol. 216r-221r.|tActe de l'appel Intergect\u00e9 par l'Universit\u00e9 de Paris contre le Concordat entre le Pape Leon x et le Roy Fran\u00e7ois premier en faveur des eslections. Appellatio Universitatis Parisiensis pro sacrarum electionum et juris communis deffensione adversus Concordata Bononiensia Anno domini 1515 -- |gFol. 222r-222v.|tDecret de l'universit\u00e9 de Paris faisant deffense a tous libraires de l'Universit\u00e9 d'imprimer et vandre le pretendu Concordat abrogant la Pragmatique sanction -- |gFol. 223r-231v|tPlaidoy\u00e9 de M. Jean Bochart seigneur de Norroy Champigny et le M?eduillet Advocat en parlement pour l'Universit\u00e9 de Paris opposante et ampeschante la publicacion du Concordat sur l'abolicion de la pragmatique sanction prononc\u00e9 en presence du Roy seant au parlement en son lict de Justice -- |gFol. 232r. |tExtraict des Annales d'Aquitaine de Maistre Jean Boucher -- |gFol. 233r.|tOpposition de ceux du chappitre de l'eglise de Paris a la publicacion du concordat; Extraict des registres de parlement. Du xxii.e Mars 1517 -- |gFol. 233v-234r.|tCe qui a est\u00e9 propos\u00e9 par Messieurs du chappitre de Paris en la cour de parlement par Maistre Guillaume Guedoyne (Huedoyne?) de ladicte eglise..."], "520": ["Transcriptions of 22 documents relating to the Concordat of Bologna, 1515-1518."], "090 8": ["Robbins MS 231"], "600 00": ["Francis|bI,|cKing of France,|d1494-1547.", "Leo|bX,|cPope,|d1475-1521."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=102;fullview=yes"], "300": ["235 leaves :|bpaper ;|c411 x 276 (275 x 130) mm bound to 420 x 280 mm."], "260": ["France?,|c[between 1575 and 1599]"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060807q16001650fr ||||||||||||00|||lat|d"], "245 00": ["[Documents relating to the Concordat of Bologna of 1515- 1518 between Pope Leo X and Francis I, King of France]"], "546": ["Latin and French."], "583": ["|zCataloged in hand by Tyler Lange and Jennifer K. Nelson, August 2006."], "561": ["Manuscript was once owned by Henri de Gu\u00e9n\u00e9gaud, whose coat of arms is stamped and decorated in gold tooling in the middle of the front and back covers. In pencil on front pastedown are 2 French notes, written in pencil, \"Avec armes de Henri de Gu\u00e9n\u00e9gaud, Garde des Sceaux et Secretaire d'Etat (1609-1676), Olivier XIX pl. 1889\"; \"Olivier cite le m\u00eame [---] sur un mss. du XVII a la vente de Kermaingant 1925 - etc.\""], "500": ["Ms. codex.", "Title provided by cataloger. Added title from title page.", "Collation: Paper (no watermark visible), fol. 235 + i; 1- 28\u2078 29\u2076 30\u2074; no catchwords, no signature marks.", "Layout: Written in up to 32 long lines; frame ruled in dry point.", "Script: Written in a secretary hand with very pronounced loops in the ascenders and descenders.", "Decoration: First letter of each section title written in 4-line, swirly capital letter. First letter of each paragraph written in 3-line, swirly capital letter.", "Binding: 17th cent., brown-leather binding over pasteboard; 6 raised bands on spine. Gold-tooled double lines around the edges; coat of arms of Henri de Gu\u00e9n\u00e9gaud on the front and back covers. 7 compartments on spine, 6 with gold floral decoration and one containing the title, also gilt, \"CONCORDAT EN / LE PAPE LEON X / ET LE ROY FRANCOIS I.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 231."], "700 1": ["Gu\u00e9n\u00e9gaud, Henri de,|d1609-1676.|4asn|4fmo|5CUL."], "246 0": ["Concordat faict a Boulogne entre le Pape Leon X et le Roy Fran\u00e7ois premier, 1516"], "852 8": ["CUL|bRBCAG|hRobbins MS 231|xCIN=JKN"], "610 10": ["France.|bParlement (Paris)"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS44": {"001": ["06-B4255"], "245 10": ["[Summa iuris]"], "505 0": ["Fol. 1r-188v: \"//c. de arbi. autenticum decernimus, de hoc habes exemplum...vel dignitas ecclesiastica talis est quod //\""], "520": ["The manuscript is both acephalous and incomplete. Due to the loss of the first 15 folios, the prologue, together with entries from \"Abbas\" through the first half of \"De arbitris\" are missing. The first complete rubric in \"De arbitris\" is \"De effectu arbitrii\". Similarly, due to the loss of folios after fol. 187v, the text ends in the middle of the rubric on \"De symonia commissa pro confraternitatibus processionibus et exequis mortuorum\". In addition, fol. 108-143, 145, 216-227, 250-252, and 257- 258 are missing (I am referring here to the original foliation)."], "100 0": ["Monaldo,|cda Capodistria,|dca. 1210-ca. 1280."], "852 8": ["CUL|bRBCAG|hRobbins MS 44|xCIN=JKN"], "246 2": ["|iSecundo folio: |asummam ab ipso"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060901q13251375it ||||||||||||00|||lat|d"], "581": ["Monaldus, Summa perutilis atque aurea venerabilis viri fratris Monaldi in utroque jure tam civilique canonico (Lugduni: Venundantur per Petrum Baleti, [1516?])"], "546": ["Latin."], "300": ["|3Original: |a188 leaves :|bparchment ;|c250 x 185 (180 x 125) mm bound to 260 x 195 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 00-45) and positive (Robbins MS 44)"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 188 + i (modern paper); 1\u00b9\u00b2\u207b\u00b2 2-3\u00b9\u00b2 4\u00b9\u2070\u207b\u00b2 5\u00b9\u00b2\u207b\u00b2 6-17\u00b9\u00b2. Contemporary foliation in Arabic numerals in red ink, in the upper left corner of each folio verso, starting from 16 to 251, with the losses discussed above. Catchwords in the lower margin, in the right side, on verso, by the hand of the scribe. Quire numbers are visible in the lower margins on the right side (lower-case letters from \"a\" to \"f\", in red ink.", "Layout: Written in two columns, 40 lines for each column.", "Script: Written in textualis libraria script, apparently by one hand.", "Decoration: Many red and blue penworked initial throughout, mostly on two lines. Red and blue alternating paragraph signs. Red rubrics. Many initials in the text touched in red.", "Binding: Bound in vellum over pasteboard (18th century?).", "Origin: Written in Italy, possibly between 1325 and 1375.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 44."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, September 2006."], "090 8": ["Robbins MS 44"], "260": ["[Italy,|cbetween 1325 and 1375]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=30;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS74": {"001": ["ocn641659451"], "260": ["Poland ,|c[between 1416 and 1499]"], "040": ["BOL|eamremm|cBOL"], "520": ["Bishopric of Culm (Che\u0142mno)"], "300": ["|3Original:|a5 leaves :|bpaper ;|c310 x 215 (270 x 205) mm bound to 315 x 225 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-61) and positive (Robbins MS 74)"], "099": ["Robbins MS 74"], "003": ["OCoLC"], "245 00": ["[Ecclesiastical letters from the bishopric of Culm (Che\u0142mno)]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript may have once been housed in the diocesan library of Tor\u00fan (Che\u0142mno, now Poland)."], "500": ["Ms. codex.", "Title supplied by cataloger; added title from front cover.", "Collation: Paper, fol. i + 5 + 1; 1\u00b2(+1) 2\u00b2.", "Layout: Written in 2 columns of 64-66 lines.", "Script: Written in a cursiva libraria script possibly by three hands (hand one: fol. 1v-3r, 5rv; hand two: fol. 3v; hand three fol. 4rv).", "Binding: Bound in soft grey cardboard covers; front cover has a border outlined in ink bearing the title \"Decreta Synodus Culmensis de anno 1481.\"", "Music: Messine-German Gothic notation on a five-line staff (fol. 4rv).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 74."], "035": ["(OCoLC)641659451"], "505 8": ["Fol. 3v: Nikolaus Krapitz (?), Bishop of Che\u0142mno \"[text] Ex pontificali Romano de gloria in excelsis et ite missa est Dominica prima aduentus usque ad natiuitatem domini...Et in omnibus consecracionibus ecclesiarum altarium et pontificum.\"", "Fol. 4rv: Music Gloria in excelsis Deo. Ite missa est.", "Fol. 5rv: Stephan von Niborka (?), Bishop of Che\u0142mno \"[text] Stephanus dei gratia et apostolicem sedis prouidentiam episcopus Culmensis volumus esse notum Quod in clericali synodo de hoc anno 1481...Elevatio manuum mearum sacrificium vespertinum...Kyrie cum iubilo.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=45;fullview=yes"], "008": ["100615q14161499pl 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, May 2010."], "546": ["Latin"], "246 14": ["Decreta synodis Culmensis de anno 1481"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100615113528.0"], "505 0": ["Fol. 1v-3r: Johannes Marienau (?), Bishop of Che\u0142mno \"[text] In nomine Sancte et indiuidue trinitatis patris et filii et spiritui sancti Amen Cum statuta synodalia ideo condantur...Ad alias nichilominus et graviores penas studium quod culpa execerit delinquendi.\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS68": {"001": ["06-B4465"], "245 10": ["[Summa aurea]"], "505 0": ["Fol. 1r-337r: \"// divinis secularia preponentes...De reliquo reposita est in corona iusticie, quem reddet mihi in illa die iustus iudex. Cui est honor laus et gloria per omnia secula seculorum amen. Benedictus ideo Dominus meus Iesus Christus qui est benedictus per eterna secula seculorum amen. Et idem gracias et laudes per infinita secula seculorum amen. [rubr.] Pro summe summo sit regi gloria summo.\""], "520": ["This manuscript is an incomplete copy as follows: the first part of the Prohemium (originally on folios prior to fol. 1) is missing. The first paragraph in Liber secundus on fol. 81 was cut out. Due to a massive loss of folios between fol. 204 and fol. 205, large portions towards the end of Liber tertius and the beginning of Liber quartus are gone."], "710 2": ["San Pablo (Monastery : Valladolid, Spain).|4asn|4fmo|5CUL."], "510 4": ["Henrici de Segusio, Cardinalis Hostiensis Summa aurea, ad vetustissimos codices summa fide diligentiaque nunc primum collata, atque ab innumeris erroribus, quibus scatebat hactenus, repurgata (Venetiis : apud Iacobum Vitalem, 1574)"], "100 0": ["Henricus,|cde Segusio, Cardinal,|dapproximately 1200-1271."], "852 8": ["CUL|bRBCAG|hRobbins MS 68|xCIN=JKN"], "260": ["[Spain?,|cbetween 1300 and 1325]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio: |arethorici"], "546": ["Latin."], "008": ["060914q13001325sp ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a337 leaves :|bparchment ;|c390 x 260 (300 x 190) mm bound to 415 x 285 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 02-56) and positive (Robbins MS 68)"], "561": ["The manuscript once belonged to the library of Cardinal Iohannes de Turrecremata (1388-1468; owner's mark on fol. 338r: \"Iste liber pertinet domino Cardinali Sancti Sixti;\" a different, modern hand has used pencil to mis-transcribe this text as \"liber pertinet domino Cypriali Sancte\"), and, perhaps, to the monastery of San Pablo in Valladolid. In the early part of the twentieth century, the manuscript was in Spain, whence it was purchased by Arthur Charles, fourth Duke of Wellington; Sir Arthur sold it at Sotheby's (see note on front pastedown: \"Purchased by the Duke of Wellington in Spain about 1906, sold by him at Sotheby's\"). At some point the manuscript was in the hands of Robert Strouse of Napa Valley, California."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 338 + i (modern paper); 1\u00b9\u00b2\u207b\u00b9 2-3\u00b9\u00b2 4\u00b9\u2070\u207b\u00b9 5-15\u00b9\u00b2 16\u00b9\u00b2\u207b\u00b9 17-20\u00b9\u00b2 21\u00b9\u2074\u207b\u00b9 22-28\u00b9\u00b2 29\u2078. Catchwords in the right corner of the lower margin, on verso, by the hand of thr scribe, mostly decorated with red pen strokes. No contemporary foliation and no quire signatures are provided.", "Layout: Written in two columns, 68 lines for each column. Ruled in lead; prickings visible in the upper and lower margin. Wide margins, no marginal additions or notes.", "Script: Written in a tidy textualis libraria script, close to the littera formata, apparently by only one hand.", "Decoration: Many illuminated initials mostly on 3 or 4 lines, painted in gold, pink, light blue and white: they show human heads, animal heads and varous grotesques. Alternating red and blue paragraph marks, on two lines. Alternating red and blue paragraph marks on one line throughout. Red rubrics; running titles which alternate blue and red letters.", "Binding: Thick wooden boards, originally bearing little stamps and fillets, restored possibly in the 19th century and covered with brown morocco leather. Front cover and back cover do not match; back has metal bosses, edge pieces, and hardware for clasps (now missing); paper flyleaves; spine in poor condition.", "Origin: Possibly written in Spain during the first quarter of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 68."], "700 1": ["Torquemada, Antonio de,|dfl. 1553-1570.|4asn|4fmo|5CUL.", "Charles, Arthur.|4asn|4fmo|5CUL.", "Strouse, Robert.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 68"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=39;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS27": {"001": ["06-B2670"], "260": ["Italy,|cbetween 1695 and 1725."], "505 0": ["Fol. 3r-73r: \"[text] Antequam ad clausulas ac ad rescripta cum quibus procedit signatura descendam, operae pretium duxi esse aliqua in genere delibare de officio...Et haec quae usque dictae sunt pro complimento huius praxis signaturae ad maiorem Dei gloriam et Beatae Mariae Virginis honorem exarata intelligantur\"; fol. 74r-75v: blank; fol. 76r-99r: \"[text] Summarium huius operis: 1. Quid sit signatura iustitiae...352. Iurisdictio iudici ad quas non tribuitur ante factam citationem ad dicendum ad commissionem, a c illius reproductionem. Et haec ad maiorem Dei gloriam et Beatae Virginis Mariae honorem. Finis opusculi huius\"; fol. 99v: blank; fol. 100rv: \"Index rescriptionum\"; fol. 101r-102v: blank."], "520": ["The first section of the text is an overview, with references to specific cases, of the office of signatura justitiae of the Holy See. The second section of the text centers on clausulae, or formulae insterted into pontifical acts such as bulls and rescripts, giving specific instructions to be executed by the recipient. The third section of the text treats the concept of rescripts, i.e. written replies issued by the Holy See in response to an inquiry, petition or request. One of the famous decisions mentioned on fol. 5r in conjunction with the office of signatura justitiae involves Christina, ex-queen of Sweden (1626-1689) and her friend, mentor, and universal legatary Cardinal Decio Azzolini (1623-1689) (see Robbins MS 17). The manuscript was written after 1695, the year of the decision in a case involving Count Vafeld and Marquis Azzolino."], "852 8": ["CUL|bRBCAG|hRobbins MS 27|xCIN=JKN1"], "561": ["At base of spine hand-written in ink: \"M 2\" and on inside pastedown in ink: \"FF 18.\""], "008": ["060608q16951725it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["De officio et potestate signatura[e] iustitia[e] ac de clausulis et rescriptis :|bcum quibus eadem signatura procedit cum pluribus ad eandem materiam observationibus quae in signatura[e] tribunali practicantur."], "546": ["Latin."], "300": ["|3Original: |a102 leaves :|bpaper ;|c192 x 127 (149 x 85) mm bound to 200 x 138 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 98-127) and positive (Robbins MS 27)"], "600 10": ["Azzolini, Decio,|d1623-1689."], "500": ["Ms. codex.", "Title from title page (fol. 2r)", "Collation: Paper (similar, but not identical to, Briquet \"Ancre,\" 488), fol. 102; 1\u00b9\u2070 2-3\u00b9\u2074 4\u00b9\u2078 5\u00b9\u2074 6\u00b2\u00b2 7\u00b9\u2070.", "Layout: Written in 24 long lines.", "Script: Written in a secretary script by one hand.", "Bound in vellum; 6 raised bands. Title hand-written in ink on spine: \"De officio signat. iustit.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 27."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "090 8": ["Robbins MS 27"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS183": {"001": ["ocn244020790"], "245 10": ["De bonis patrimonialibus et quasi pontificum... [a collection of works about Papal property]"], "040": ["BOL|eamremm|cBOL|dBOL"], "003": ["OCoLC"], "300": ["|3Original: |a130 leaves :|bpaper ;|c299 x 212 (280 x 144) mm bound to 310 x 212 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 08-139) and positive (Robbins MS 183)"], "510 4": ["Phillips, T. Cat ms.|c5129."], "260": ["Rome,|cca. 1642"], "099": ["Robbins MS 183"], "100 1": ["Lugo, Juan de,|d1583-1660."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript bears a Colonna Family stamp on the index page and on the last page of text; was once also in the collection of Sir Thomas Phillips, his no. 5129."], "500": ["Ms. codex.", "Portion of title in square brackets supplied by cataloger.", "Collation: Paper (similar but not identical to Briquet, Oiseau 12250) fol. i (paper) + 126; 1\u00b2 2\u2078 3\u00b2 4\u00b2\u00b2 5\u00b2 6\u00b9\u2070 7\u00b2\u2078 8\u00b2 9-12\u00b9\u2070 13\u00b9\u2074 15\u00b9\u2070 (last fol is pastedown); foliation in ms begins on first page of text, skips fol. 77.", "Layout: Written in 24 long lines; catchword at the end of each page.", "Script: Written in a neat cursive script by one hand.", "Binding: Vellum over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 183."], "035": ["(OCoLC)244020790"], "700 3": ["Colonna family,|4asn|4fmo|5BOL"], "008": ["080818s1642 it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2008."], "546": ["Latin and Italian"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL"], "005": ["20080818045133.0"], "505 0": ["Fol. 1r-73r. \"In congregatione de mandato sanctissimi D.N. Urbani III habita in Palatio Apostolico S. Petri die 2a Novembris 1641 fuit post longam et exactam disputationem firmata infrascripta conclusio\" -- Fol. 78r-87r. \"Quomodo ecclesia Romana acquisiverit dominium bonorum quae possidet\" -- Fol. 89r-91v. \"Quomodo quaedam loca devenerit in potestatem Romani Pontificis\" -- Fol. 91v-97r. \"Quod ius habeat Ecclesia Romana in regna subiecta principibus Christiani et quem censum ab illis exigat\" -- Fol. 98r- \"An Papa ut Papa possit thesaurizare\"."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS90": {"001": ["05-B14051"], "260": ["[Italy,|cca. 1424]"], "505 0": ["Fol. 1r-11v: \"[rubr.] Questa sie la regula della fraternita delli frati delli servi de Sancta Maria. Instituta e ordinata dal sanctissimo in Christo padre papa Martino quinto como se contene in el previlegio, etc. El primo capitulo si tracta della conditione delle persone che hanno el recevere labito sancto e si fa sey commandamenti. [text] El primo commandamento sie questo. Nui instituemo e volemo e commandemo, accio che questo ordine si se mantenga...e la qualle (sic) indulgentia conceda il nostro signore che vi conducha a la gloria del paradiso dove esso vive cum el padre et cum lo spiritu sancto in secula seculorum amen.\""], "505 8": ["Fol. 11v-18v: \"[rubr.] Qui comencia le perdonanze della sancta cita de Roma ecetera [text] La prima domenica de ladvento la perdonanza he a Sancta Maria Mazore 28 1000 48 anni...et per ogni altare se debbe dire in zenochione cinque pater nostre (sic) et cinque ave marie per el summo pontifico con questa oratione. Amen.\"", "Fol. 18v-21r: \"[rubr.] Forma absolutionis in mortis, articulo primo per disscretum sacerdotem electum ad dandum indulgentiam est ben accendendum et inspicienda forma litterarum apostolicarum. Item qui languens sit vere penitens et confessus et si habet de alieno quod restituat vel promictat aut alius pro eo. Et intelligitur etiam de mala fama data. Et si loqui possit ipsemet petat alioquin unus de circumstantibus ipsius nomine sanguentis; qui licet non possit loqui et habeat tamen cognitionem, ponat se in manibus sacerdotis et dicat \"Confiteor deo et cetera\" et astantes dicant similiter, deinde dicat ipse sacerdos \"Misereatur tui et cetera\" et \"Indulgentiam et cetera.\" [text] Dominus noster Ihesus Christus per suam sanctam misericordiam et misterium nostrum te absolvat...et cum fueris in mortis articulo constitutum iuxtam formam et tenore gratie apostolice a praefato domino nostro Gregorio papa concesse et indulte. Amen.\""], "520": ["Rules for the Order of the Servants of Mary (Ordo Fratrum Servorum Beatae Mariae Virginis) instituted by Pope Martin V. Fol. 1v contains a short biographical note, in Italian, in a cursive hand about Pope Martin V. On the front pastedown, written in pencil in a modern hand, is the note \"Martinus V, Pont. Max., Italy 15th c.\" The following title is written on the front cover \"Regola de' Fratelli e Sorelle de' Figli di S. Maria instituta da Martino V. Papa\"; and in a different hand: \"Regola dei Frati dei Servi di Ma.\" Also on the front cover is an approximate date for the copying of the mauscript: \"1417 circa,\" although it must have been copied after 1424, as it contains an Italian translation of the rule given in a bull dated in the 7th year of the pontificate of Martin V (1417-1431)."], "245 13": ["La regula della fraternita delli frati delli s[er]vi de Sancta Maria."], "852 8": ["CUL|bRBCAG|hRobbins MS 90|xCIN=JKN"], "008": ["051027s1424 it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. codex.", "Title from opening rubric (fol. 1r).", "Collation: Paper, fol. ii + 21 + ii ; 1\u00b9\u2078 (+1), 2\u00b2.", "Layout: Written in 20-21 long lines.", "Script: Written in large Gothic bookhand by one, possibly two hands.", "Decoration: Decorated initial on fol. 1r; titles and initials in red ink; line fillers throughout in brown ink.", "Binding: Bound in limp parchment.", "Origin: Written in northern Italy, presumably Tuscany.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law, Boalt Hall, Robbins MS 90."], "581": ["For a restored, Italian version of the rule by Lelio Baglioni, Vicar General of the Servite Order, see: 'Regola che diede Papa Martino V e confirm\u00f2 Innocentio VIII a Fratelli e le Sorelle della Compagnia de' Servi di Santa Maria ridotta d'ordine del P. Reverendissimo Maestro Lelio Baglioni...' (Florence: Giorgio Marescotti, 1591), 31-93. See 'Bullarium Ordinis Servorum Sanctae Mariae,' ed. Franco Andrea del Pino (Rome: Istituto Storico O. S. M., 1974) for a printed version of Pope Martin V's bull of 1424."], "546": ["Italian and Latin."], "300": ["|3Original: |a21 leaves :|bpaper ;|c230 x 179 (115 x 187) mm bound to 232 x 183 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 02-73) and positive (Robbins MS 90)"], "561": ["Fol. 1v contains an inventory number: \"312SQB1.\""], "100 0": ["Martin |bV,|cPope,|d1368-1431."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, October 2005."], "LEADER": ["00000ctm 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=57;fullview=yes"], "090 8": ["Robbins MS 90"]}, "RobbinsMS78": {"001": ["ocn727076718"], "260": ["France,|c[between 1725 and 1775]"], "040": ["BOL|eamremm|cBOL"], "245 00": ["De re janseniana"], "520": ["Volume is comprised of a variety of manuscript and printed documents pertaining to the polemics regarding the Jansenist and Quesnelist movements in France. Also present are commentaries regarding the liberties of the Gallican church. The printed sections are excerpts from the registers of the French Parliament, decisions of the Conseil d'Etat, edicts of the French Royal Court, and decisions of the Faculty of Theology at the Sorbonne, most of which were issued during the second half of the eighteenth century. In addition, excerpts are included from the following books: Pasquier Quesnel (1643-1719), R\u00e9flexions morales, of which 101 propositions were condemned by Pope Clement XI in his bull Unigenitus (September 1713); Claude Mey (1712-1796), Apologie de tous le jugements rendus par les tribunaux s\u00e9culiers en France contre le schisme, supressed by the Parliament of Paris and condemned by Pope Benedict XIV in 1752; Alexander Pope (1688-1744), Essai sur l'homme (Amsterdam & Leipzig, 1749); Charles de Secondat, Baron de Montesquieu (1689- 1755), De l'Esprit des lois (Geneva, 1750); and Ren\u00e9-Louis de Voyer, marquis d'Argenson (1694-1757), Histoire du droit public ecclesiastique (London, 1740). The manuscript sections include commentaries on the above issues; excerpts from letters by French bishops; lists of Latin names of French bishoprics; notes on the history of the French church; notes on pertinent papal bulls. Other excerpts can be identified as coming from Alexandre de Rogissart's Les d\u00e9lices de l'Italie (Paris: chez Jean et Michel Guignard, 1707; with other editions printed at Leiden in 1706 and 1709, and at Amsterdam in 1743)."], "650 0": ["Jansenists."], "510 4": ["Phillips, T. Cat ms.|c3542"], "008": ["110525q17251775fr 000 0 fre d"], "099": ["Robbins MS 78"], "003": ["OCoLC"], "546": ["Mostly French; some Latin."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 3542)."], "500": ["Ms. codex.", "Title from the top of page 1.", "Layout: Written in long lines.", "Binding: Blue paper over pasteboard.", "Origin: Volume was created from various independent fragments subsequently bound together.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 78."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts, January 2011."], "005": ["20110525051920.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)727076718"], "246 3": ["De re ianseniana"], "300": ["|3Original:|a734 pages:|bpaper ;|c210-220 x ca. 165 mm bound to 235 x 190 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-63) and positive (Robbins MS 78)"]}, "RobbinsMS51": {"001": ["ocn252269587"], "245 10": ["Graviora aliquot dubia const[itution]is san[ctissi]mi D[omi]ni N[ost]ri Greg[ori]i XV de Romani Pontificis electione."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Prospero Fagnani's treatise on the new regulations concerning papal elections established by Pope Gregory XV. Most of the text is difficult to read as the brown ink has burned through."], "510 4": ["Philipps, T. Cat. ms.|c5326."], "260": ["Italy,|c[between 1621 and 1699]"], "099": ["Robbins MS 51"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "100 1": ["Fagnani, Prospero,|d1588-1678."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Was once in the collection of Colonna Family as evidenced by their oval, red stamp on front flyleaf and last page. Was also in the collection of Sir Thomas Philipps (his no. 5326)."], "500": ["Ms. codex", "Title from title page (fol. 1r).", "Collation: Paper, fol. i + 110 (contemporary pagination, pp. 1-167 starting at first page of text and skipping blank pages) ; 1\u2078 2-3\u00b9\u2074 4\u00b2 5\u00b9\u2070 6\u00b2 (+1) 7-9\u2074 10\u2078 11\u00b2 12\u00b9\u2074 13\u00b9\u2070 14\u2076 15\u2078 (last fol. is pastedown).", "Layout: Written in 20 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: Bound in limp vellum. Title on spine reads \"De Elec. Pontif. Fagnani.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 51."], "600 00": ["Gregory|bXV,|cPope,|d1554-1623."], "300": ["|3Original:|a110 leaves :|bpaper ;|c274 x 203 (85 x 140) mm bound to 280 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-49) and positive (Robbins MS 51)"], "650 0": ["Popes|xElection."], "700 3": ["Colonna family.|4asn|4fmo|5BOL."], "008": ["080917q16211699it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "546": ["Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080917033425.0"], "505 0": ["Fol. 1r: Title page ; fol. 2r-6v: \"[Index] Quod pertinet ad electionem Romani Pontificis in genere...An valeat compromissum initum in unum tantum ex s[acro] Collegio pag. 107 (?) decernitur\" ; fol. 7r-8v: blank ; fol. 9r-63r : \"[text] Graviora aliquot dubia constitutionis Sanctissimi Domini Nostri Gregorii XV de Romani Pontificis electione. Sacratissimae huic Constitutioni de Romane Pontificis tametsi nulla inest dictia...et per ampliores homines perfectissima veritas revelatur [?] ultima ad finem C de fidei [----] eam extra conscientiam 64 distint[iones].\""], "035": ["(OCoLC)252269587"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS40": {"001": ["ocn456449256"], "260": ["Italy,|c1600s."], "040": ["BOL|eamremm|cBOL"], "611 20": ["Council of Trent|d(1545-1563)"], "581": ["Archivio di Stato di Napoli, \"Aspetti della riforma cattolica e del Concilio di Trento a Napoli: Mostra documentaria, Catalogo,\" ed. Jole Mazzoleni [Naples: L'Arte tipografica Napoli, 1966], 73, art. 135: \"Relazione del Reggente Villani sulle materie del Concilio Tridentino pregiudicanti la reale giurisdizione del Regno di Napoli, rimessa al Vicere, duca d'Alcala.\""], "300": ["|3Original:|a478 leaves :|bpaper ;|c325 x 210 (245 x 145) mm bound to 340 x 220 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-40) and positive (Robbins MS 40)"], "008": ["091014q16001699it 000 0 ita d"], "099": ["Robbins MS 40"], "583": ["|zCataloged from existing description and in hand by Luminita Florea and in hand by Pamela Diaz, October 2009."], "003": ["OCoLC"], "245 00": ["Documents concerning the application of the decisions of the Council of Trent in the Kingdom of Naples."], "520": ["Table of contents appears on unnumbered folios following fol. 468."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "651 0": ["Naples (Kingdom)"], "561": ["Previously in the holdings of a private library, possibly in Italy (unidentified cardinal's bookplate on the inside front cover)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Written in 23-24 long lines.", "Script: Written in a neat cursive script by one hand (possibly the same hand as Robbins MS 39).", "Binding: Vellum over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 40."], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20091014012659.0"], "035": ["(OCoLC)456449256"], "546": ["Italian, Latin, and Spanish."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS63": {"001": ["06-B3031"], "260": ["Venice,|cbetween 1517 and 1567."], "505 0": ["Fol. 1r-2r: \"[text] Ali lettori. Bella cosa certo mi pare che sia il leggere delle lettere famigliari e domestiche...fra tanto sta sano et vivi lieto, ch'io spero non mancarti. Punto di questa mia promissione. Lo di XX\u2070 Febraio MDLV in Vinegia\"; fol. 3r-60r: \"[Libbro primo: text] Lettere volgari diverse, da diversi personaggi, et altri (sic) iscritte in diversi tempi, allo eccellente dell'una e l'altra legge dottore M. Marco Mantoa, in tre libbri (sic) divise...et di questo che ricevo hora, conoscendo un cosi raro et gentil spirito come \u00e8 questo, al quale non mancar\u00f2 di fare quanto faira per me stesso, et piu, se piu saper\u00f2 o poter\u00f2 con le mie deboli forze\"; fol. 60v-117r: \"[Libbro secondo: text] Quando la sua mi fu data io era in campagna et la mostrai subito allo illustre (?) Cardinal de Carpi...ne la parte nega, che li beni non fussero soggetti al fideicommisso\"; fol. 117v- 174r: \"[Libbro terzo: text] Vostra Eccellenza sar\u00e0 contenta vederle et sottoscriversi, che non si mancher\u00e0 di far il debito...Lo di XX\u2070 di Febrai, MDLV sotto lo imperio di Francesco Venerio serenissimo et benemerito Doge di Vinegia\"; fol. 174r-176v: \"[text] Tavola alphabetica di tutti coloro che in questi tre libbri si veggono et leggono haver scritto allo Eccellente Mantoa\"; fol. 176v- 177v: \"[text] Additione (marginal note: 'queste 3 epistole deono esser poste avanti la tavola...fo. 343'). Al molto magnifico et eccellente dottore M. Marco Mantova...che Iddio felice la conservi et prospera sempre; \u00e0 xvi dicembre.\""], "245 00": ["Lettere volgari diverse, da diversi personaggi, [et] altri (sic) iscritte in diversi tempi, allo eccellen[te] dell'una [e] l'altra legge dottore M. Marco Mantoa, in tre libbri (sic) divise."], "520": ["The manuscript is a collection of several hundred letters written to Marco Mantova Benavides (1489-1582), jurisconsult and doctor in both laws, copied by his nephew, Giovanni Mantova. Most of the letters are from noted humanists, jurists, artists, and political and ecclesiastical figures active during the first half of the sixteenth century. Among them the future Cardinal Pietro Bembo (1470-1547); Pietro Aretino (1492-1556); the poet C. Cornelio Frangipani (16th cent.); the sculptors Alessandro Vettorio (16th cent.) and Bartolomeo Amannati (1511-1592); the Bishops of Alexandria, Chioggia, Feltre, and Trent; Cardinal Borromeo (St. Charles Borromeo, 1538-1584); the Dukes of Ferrara, Florence, and Urbino; Lucrezia d'Este; and so on. Margins on fol. 10, 18, 24, 39, 46, 48, 57, 62, 65, 67, 72, 73, 74, 75, 81, 82, 86, 87, 95, 98, 99, 100, 102, 110, 114, 120, 133, 154, and 155 partly or fully excised."], "581": ["Ronnie H. Terpening, \"Pietro Bembo and the Cardinalate: Unpublished Letters to Marco Mantova,\" Lettere italiane 32 (1980): 80, n. 26."], "852 8": ["CUL|bRBCAG|hRobbins MS 63|xCIN=JKN"], "008": ["060627i15171567it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Italian."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "300": ["|3Original: |a170 leaves :|bpaper ;|c258 x 191 (190 x 95) mm bound to 278 x 205 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 94-3109) and positive (Robbins MS 63)"], "561": ["The manuscript was once part of the library of Walter Sneyd (his bookplate on the inside of the front cover: \"Ex libris Gualteri Sneyd\") of Keele Hall (Staffordshire) and probably part of lot 433 in the Sneyd sale (note in pencil on inside front cover) of 16 December 1903 in London."], "500": ["Ms. codex.", "Title from beginning of Book One (fol. 3r).", "Collation: Paper (watermark similar to Briquet \"Monts,\" 11783: Padua 1520), fol. ii + 177 + ii; 1\u2078\u207d\u207a\u00b9\u207e 2-22\u2078.", "Layout: Written in 31 long lines; center of text, plus inner and outer margins, guided by folding.", "Script: Main text and marginal notes written in a cursive script by one hand. Additional letters on final 2 folios - with accompanying marginal notes - written in a second hand in darker ink.", "Binding: Vellum over pasteboard; front and back flyleaves and pastedown of paper decorated with painted floral pattern. Handwritten on spine is title: \"Lettere M. Marco Manoa.\"", "Origin: The letters were selected from among the papers in Marco Mantova's private archive and copied in no particular order by his nephew, Giovanni Mantova (marginal note on fol. 1v: \"M. Giovani suo nipote minore\"). The earliest original letters date from 1517, the latest from January 1555. The manuscript appears to have been completed on 20 February 1555 (colophon on fol. 174r [p. 343]). The final four letters (two of which are dated 1557 and 1567 respectively) were copied in a different hand on fol. 176v-177r (pp. 348-350), following the index of authors. According to two marginal notes in this later hand (fol. 174r and 176v [pp. 343 and 348] respectively), these letters were to be inserted on p. 343, after the last letter of the third book. It is possible that the manuscript (with the exception of the last four pieces) was used for the 1555 edition printed in Venice by Gabriele Giolito de' Ferrara (seventeenth-century note on the front inside cover).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 63."], "700 1": ["Mantova Benavides, Marco,|d1489-1582.", "Sneyd, Walter,|d1809-1888.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 63"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=35;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS291": {"001": ["ocn765525803"], "260": ["[Italy ,|cbetween 1450 and 1499]"], "040": ["BOL|eamremm|cBOL|dBOL"], "650 0": ["Canon law."], "710 2": ["Catholic Church.|bPope (1305-1314 : Clement V)"], "300": ["|3Original:|a36 leaves :|bpaper ;|c280 x 211 (238 x 164) mm bound to 290 x 221 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS 291)"], "008": ["111201q14501499it 000 0 lat d"], "099": ["Robbins MS 291"], "003": ["OCoLC"], "245 00": ["[Commentaries on the Clementine constitutions]"], "520": ["Set of notes or commentaries on texts from the Clementine Constitutions (Clem., 3, 14 through Clem., 5, 11). The book does not follow the original order of the Constitutions. Leaves missing from beginning and end. Contemporary foliation in ink is erratic. Some water damage on outer edges of leaves and some wear on bottom margin near spine, but no text damaged."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (watermark: Briquet \"Monts\" 11702: Pisa, 1440), fol. 36 (contemporary foliation is erratic: repeated, skipped, and out of order foliation); catchwords on fol. 10v and 19v.", "Two columns, 68 lines per page, dark brown or black ink. Occasional headings in capitals are the height of two or three lines of text.", "Script: Written in a gothic script by at least two hands (different hand appears on 34v, 35v, and 36r).", "Binding: 19th century pasteboard with marbled paper on spine.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 291."], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez and Jennifer K. Nelson, December 2011."], "005": ["20111201030320.0"], "505 0": ["Fol. 1r [94r]-3v [96v]: \"De celebratione mi[s]sarum\" -- fol. 3v [96v]-5r [98r]: \"De baptismo et ei[us] ef[fec]tu presenti\" -- fol. 5r [98r]-6v [99v]: \"De reliquis et veneratione sanctorum\" -- fol. 6v [99v]-7r [100v]: \"De immunitate ec[c]lesiarum\" -- fol. 7r [100v]-9r [101r]: \"De consa[n]guinitate et aff[initate]\" -- fol. 9r [101r]-10r [102r]: \"De magistris\" -- fol. 10r [102r]-10v [102v]: \"De iudeis et saracenis\" -- fol. 11r [103r]-13v [105v]: \"De privilegiis et excessibus privilegiatorum\" -- fol. 13v [105v]-15v [107v]: \"De p[o]enis\" -- fol. 15v [107v]-17v [108v]: \"De penitentiis et remissionibus\" -- fol. 17v [108v]-19v [110v]: \"De s[e]n[tent]ia exco[mmunication]is\" -- fol. 19v [110v]-24r [114r]: \"De verborum significatione\" -- fol. 24v [114v]-27v [117v]: foliated but blank -- fol. 28r [103r]: \"De magistris\" (no heading, but labeled in corner of page) -- fol. 28v [103v]: \"De iudeis et saracenis\" -- fol. 28v [103v]-32v [107v]: \"De herecicis multorum\" -- fol. 32v [107v]-34r [109r]: \"De [-- -] naturali vel volup[tatibus]\" -- fol. 34r [109r]-36v [110v]: \"De usuris\" -- fol. 36v [110v]: \"De excessibus prelatorum.\""], "035": ["(OCoLC)765525803"], "546": ["Latin."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS5": {"001": ["06-B3068"], "245 10": ["[Decretales]"], "505 0": ["Fol. 1r-294v: Decretales Gregorii IX; fol 1rv: \"[prologue] Episcopus servus servorum Dei dilectis filiis doctoribus et scolaribus universis bononie commorantibus salutem et apostolicam benedictionem. Incipit prologus. Rex pacificus pia miseratione disposuit...ne quis presumat aliam facere absque authoritate sedis apostolice speciali\"; fol. 1v- 294v: \"[text] De summa trinitate et fide katolica Innocentius illius in consilio generali [F]irmiter credimus et simpliciter confitemur quod unus solus est verus deus...Idem episcopo tolonensi Tua fraternitate intimavit quod cum tibi pro relevatione honeris debitorum duxerimus indulgendum ut fructus beneficiorum que inte//\""], "520": ["Manuscript contains the Decretales of Gregory IX, up to X.5.40.32. At least one folio is lacking, resulting in the loss of the last title of the 5th book. A smaller sheet of vellum containing chapter X.2.28.52, which is lacking in the text, has been tipped in between fol. 126 and 127. The glosses and marginal notes around the main text have been identified as Bernardus de Botone Parmensis, Glossa ordinaria in Decretales; Casus decretalium; Iohannes Andreae, Lectura in Decretales Gregorii IX per modum additionum redacta, fragmenta; Additiones ad Glossam ordianariam. The margins of the leaves at the beginning of the text (fol. 1-84) have been increased by the attachment of strips of parchment to the fore-edge."], "530": ["Selected digital images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=101;fullview=yes"], "510 4": ["E. Conte, \"Il manoscritto 5 della Robbins Collection: Note descrittive,\" Bulletin of Medieval Canon Law,|c19 (1989): 51-55."], "100 0": ["Gregory|bIX,|cPope,|dca. 1170-1241."], "852 8": ["CUL|bRBCAG|hRobbins MS 5|xCIN=JKN"], "008": ["060629q12751325it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "240 10": ["Decretales Gregorii IX"], "546": ["Latin."], "583": ["|zCataloged from existing descriptions by Luminita Florea and Emanuele Conte, and in hand by Jennifer K. Nelson, June 2006."], "300": ["|3Original: |a294 leaves :|bparchment ;|c400 x 280 (main text: 200 x 125; glosses: various) mm bound to 424 x 304 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-14) and positive (Robbins MS 5)"], "561": ["Early provenance not known. Library label on inner front cover with two stamped dates: 1926 and 1929."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. iii (modern paper) + 294 (old foliation in Roman numerals on fol. 1-59; old foliation in Arabic numerals on fol. 71-132, 133-176, 177-206, and 207- 251; each span of the old foliation deliniates a section) + iii (modern paper); 1-7\u00b9\u00b2 8-10\u00b9\u2070 11\u2078 12\u00b9\u2070 13\u2078 14\u00b9\u2070 15\u2078 16\u00b9\u2070 17\u2078 18-28\u00b9\u2070 29\u2078.", "Layout: Main text is layed out in 2 columns of 36 lines; glosses around the text are also in 2 columns of varying length, up to 85 lines.", "Script: Main text is written in littera bononiensis by one hand.", "Decoration: Capital letters, paragraph marks and line fillers in alternating red and blue ink with flourishes in the other color. Titles in red ink. Spaces left blank for unexecuted initials on the first folio of each part (1r, 70v, 133r, 177r, and 207r).", "Binding: Quarter-leather and marbled paper over thick pasteboard. Modern flyleaves. Title on spine reads: \"Gregorius IX decretales. Sec. XIII.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 5."], "090 8": ["Robbins MS 5"], "260": ["[Italy,|cbetween 1275 and 1325]"], "581": ["Stephan G. Kuttner et al., A Catalogue of Canon and Roman Law Manuscripts in the Vatican Library, 2 vols. (Vatican: Biblioteca Apostolica Vaticana, 1986-87), 1:139, 156-7, 158-9, 160-61, 165, 168, 169-70, 171, 172-3, 174, 175-7, 178-9. For early printed editions, see Gregorius IX, Decretalium Gregorii Pape IX compilatio, multis utilibus et ferme necessariis, adiunctis examussim castigata (Lugduni: J. Marechal, 1510); id., Decretales domini pape Gregorii noni accurata diligentia nuper emendate summoque studio elaborate...(Parisiis: solerti cura Tiemanni Keruer, 1516); id., Decretales a Gregorio nono in volume hoc redacta (Ticini: per Jacob Paucidrapense de Burgofranco, 1517); id., Gregorii Noni Pontificis Maximi Decretales epistole ab innumeris penemendis cum textus, tum glossarum repurgate quarum casibus superaddita sunt brevissimi Bernardi glossatoris notabilia, nunc primum in lucem edita (Parisiis: apud Jolanda Bonhome, 1547); id., Decretales Domini Gregorii Papae IX suae integritati una cum glossis restitutae cum privilegio Gregorii XIII Pont. Max. et aliorum principum, Corpus iuris canonici 2 (Romae: In Aedibus Populi Romani, 1548)."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS73": {"001": ["06-B3041"], "245 10": ["Tractatus iudiciarius inter Moisen procur[ator]em (?) d[o]m[ini] Yh[es]u Ch[rist]i [---] una et procur[ator]em (?) ex altera."], "505 0": ["Fol. 1r: \"[rubric] Tractatus iudiciarius inter Moisen procur[ator]em (?) d[o]m[ini] Yh[es]u Ch[rist]i [---] una et procur[ator]em (?) ex altera\"; fol. 1r-23r: \"[text] Universis Christi fidelibus atque ortodose (sic) sancte matris ecclesie fidei cultoribus...Framea suscitare super pastorem meum et super virum coherentem mihi dicit Dominus exercituum percute pastorem et dispergantur oves gregis...\"; fol. 23v-28v: ruled but blank."], "520": ["The folios of this 28-leaf codex are numbered 271 to 298 in the top right-hand corner, indicating that it was once part of a larger manuscript. Although the text never explicitly identifies itself as such, the 28 leaves making up this manuscript contain Jacobus de Theramo's Consolatio peccatorum seu processus Belial, which depicts a lawsuit, brought by Lucifer against Jesus Christ, with Moses acting as counsel for Christ and Belial for the Devil. In this manuscript the Consolatio is attributed to one Jacobus de Ancharano (fol. 1r)."], "650 0": ["Devil |vEarly works to 1800.", "Mock trials.", "Redemption|vEarly works to 1800."], "100 0": ["Jacobus,|cde Theramo,|d1350 or 51-1417."], "852 8": ["CUL|bRBCAG|hRobbins MS 73|xCIN=JKN"], "008": ["060627q14251475it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. codex.", "Title from opening rubric (fol. 1r).", "Collation: Paper (similar, but not identical to, Briquet \"Couronne\" 4660, Milan 1475), fol. ii (modern paper) + 28 + ii (modern paper); 1-2\u2077.", "Layout: Written in 39 long lines; ruled in ink, vertical bounding lines ruled in lead.", "Script: Written in a Gothic cursive script by one hand.", "Decoration: Illuminated initial on fol. 1r; chapter titles and initials throughout in red.", "Binding: Modern half-leather binding and marbled paper over pasteboard. Front and back end-papers and pastedown also of marbled paper. Title on spine reads \"Tractatus Judiciarius MS.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 73."], "581": ["Bond & Faye, Supplement to the Census, 213 (MS Boston Public Library 1544, containing a German translation of the Consolatio); Jacobus de Theramo Palladinus, Bishop of Spoleto, Consolatio peccatorum, seu Processus Belial (Augsburg: per Iohannem Schussle ciuem Aug. impressus Anno domini M.cccclxxii. Iulii vero Nonas vi); id., Reuerendi patris domini Iacobi de Theramo Compendium breue Consolatio peccatorum nuncupatum et apud nonnullos Belial vocitatum ad papam Vrbanum sextum conscriptum ([Strasbourg : Heinrich Knoblochtzer], 1484); and other editions."], "546": ["Latin."], "300": ["|3Original:|a28 leaves :|bpaper ;|c285 x 202 (197 x 113) mm bound to 292 x 210.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-60) and positive (Robbins MS 73)"], "561": ["Manuscript was once in the possession of W. Thornton of Harrow, possibly as a gift from Henry Drury (inscription on fol. iir in a nineteenth-century hand: \"Dyalogus inter Moysem et Infernalium MS chartac. Saec. 15. WThornton. Harrow. don. HDrury 1824\")."], "246 13": ["Consolatio peccatorum seu processus Belial"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["Italy,[|cbetween 1425 and 1475]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=44;fullview=yes"], "090 8": ["Robbins MS 73"]}, "RobbinsMS228": {"001": ["06-B3645"], "260": ["Italy,|c[between 1635 and 1700]"], "520": ["This volume contains various discourses, dialogues, treatises, summaria and relazioni concerning the power play between European nations, particularly during the first half of the Thirty Years' War, together with some theoretical treatises. Many marginal notes particularly in the margins of the discourse intitled \"Discorso intorno alla dignit\u00e0 Imperiale nel quale si disputa se convenga supprimerla con trasferirne l'autorit\u00e0 nel sommo Pontefice Romano\" (fol. 472r-494v). The last two chapters (fol. 634r -637r) appear to have been copied from a book printed in Milan by Filippo Ghisolfi. It is also quite possible that other chapters in this volume are written copies of printed works. Tipped in between fol. 116 and 117 and fol. 497 and 498 were scraps of paper, presumably being used as bookmarks, that read (respectively) \"Al Signore Auditore Camosci Fiscale della Sagra //\" and \"Granaceri\"; both are now in manuscript file."], "650 0": ["Thirty Years' War, 1618-1648."], "300": ["641 leaves :|bpaper ;|c292 x 210 (214 x 135) mm bound to 302 x 220 mm."], "510 4": ["Phillipps, T. Cat. ms.|c7711."], "546": ["Italian and Latin."], "852 8": ["CUL|bRBCAG|hRobbins MS 228|xCIN=JKN"], "008": ["060731q16351700it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["[Miscellanea of discourses, dialogues, treatises, summaria and relazioni concerning politics in Europe during the first half of the Thirty Years' War]"], "505 00": ["|gFol. 1r-34v.|tRelatione del trattato fatto nella semblea di Vervins tra i deputati del Re Christianissimo e del Re Cattolico e del Duca di Savoia in presenza del Cardinale di Firenze Legato di latere di Clemente VIII Sommo Pontefice, nel Regno di Francia e del Re Cristianissimo con intervento di Monsignore Gonzaga Vescovo di Mantova Nuntio di Sua Beneditione (?) e del Padre Generale dell'Osservanti di San Francesco 1598 --|gFol. 34v-76v. |tNegotiato della pace fra li Re Christianissimo e Cattolico conclusa l'anno 1598 a d\u00ec 2 di maggio col mezzo dell'Illustrissimo Signore Cardinale di Fiorenza --|gFol. 77r-95v.|tInstromento e capitoli della pace conclusa fra il Re di Francia e Re di Spagna con l'assistenza del Cardinale di Fiorenza Legato di Papa Clemente VIII nel luogo di Vervin l'anno 1598 --|gFol. 96r-112v.|tNegotio di lega e di pace tra l'Imperatore Carlo V e Francesco Re di Francia con altre particolari proposte di Monsignor Ardinghello Nuntio di Papa Paolo Terzo a quella corona -- |gFol. 112v-115v.|tCapitolationi tra il Papa e il Gran Duca di Toscana sopra le Chiane di Montepulciano dell'anno 1607 --|gFol. 116r-119r.|tConditiones perpetuae pacis sancitae inter Commissarios Regni Poloniae et Magni Ducis Lithuaniae ex una et ex altera parte inter Commissarios Magni Ducis Moscoviae --|gFol. 119v-121v.|tCopia conclusionis et confoederationis inter Serenissimum Principem ac Dominum Dominum Matthiam Arciducem Austrie Ducem Burgundiae, Styriae, Carinthiae, Carniolae et Wirtemberg etc...ratione pacificationis Viennensis conclusae et a Sua Maiestate approbabae --|g122r-142v. |tSummarium tractatus in causa Sernenissimae Domus Bavariae adversus admodum Reverendum Patrem Magistrum Abrahamum Uzovium extractum per me Fratrem Cosmam Morelles Colonie Apostolicum Inquisitorem et in dicta causa ex parte Reverendissimi Patris Generalis commissarium -- |gFol. 144r-153r.|tRagioni della Chiesa sopra lo Stato di Montefeltro e quello d'Urbino con un sommario della Bolla del Papa Paolo Terzo sopra l'Investitura data a Guido Ubaldo della Rovere dello Stato di Urbino -- |gFol. 153v- 157v.|tNota delli feudi che riconoscono la Sede Apostolica nello Stato della Romagna, Lombardia ed altre parti data alla Santit\u00e0 di Nostro Signore Papa Urbano Ottavo --|gFol. 158r-173r.|tSummarium contentorum in litteris Pauli Tertii super Investitura Ducatus Urbini facto Guido Ubaldo Iuniori de Rovere --|gFol. 176r-186v.|tDiscorso nel quale si dimostra la giustitia dell'Imperio de Spagnoli in Italia e quanto giustamente siano state prese le armi da essi per la quiete d'Italia disturbata dal Duca di Savoia Conservatore della libert\u00e0 d'Italia ingiustamente intitolato --|gFol. 187r-202r.|tRisposta alla scrittura del Signore Nostro intitolato Discorso nel quale si dimostra la giustitia dell'Imperio de Spagnoli in Italia e quanto giustamente siano state prese l'armi da essi per la quiete d'Italia disturbata dal Duca di Savoia Conservatore della libert\u00e0 d'Italia ingiustamente intitolato --|gFol. 203r-215v.|tDe comparanda et tuenda boni Principis extimatione (sic) --|gFol. 216r-255r.|tDiscorso politico in dialogo tra un Venetiano, Spagnolo e Francese circa li presenti motivi della Francia 1632 --|gFol. 256r-266r. |tAvviso alla Maiest\u00e0 del Re d'un buono e fedel Francese circa le torbolenze d'Italia --|gFol. 266r-282v.|tRisposta ad una scrittura intitolata Avviso d'un buono e fedel Francese circa le torbolenze d'Italia fatta in Roma -- |gFol. 282v-300v.|tRisposta al manifesto del Serenissimo Duca di Savoia dedicata a Domina Sua Altezza --|gFol. 301r -315v.|tDuplex cuneus ad enodandam dierum nostrorum pacem Caesari Fernando Secondo et Regi Ludovico XIII\u2070 anno 1633 Septembris cum appendice --|gFol. 316r-317v.|tProfetia sopra il Christianissimo Re di Francia Ludovico Decimo Terzo --|gFol. 317v-325v.|tLettera d'incerto auttore inviata alla Maest\u00e0 Christianissima di Francia --|gFol. 326r-328v.|tRaggionamento fatto nel senato Veneto dal Signore Marchese di Coure Ambasciatore Christianissimo per la remissione de Padri Giesuiti in quel stato --|gFol. 328v-330r.|tRisposta del Senato all'Ambasciatore --|gFol. 330r-332r.|tSommario delle ragioni per le quali Monsignore di Perona persuade al Papa la ribeneditione di Navarra -- |gFol. 332r-334v.|tRistretto dell'inconvenienti che risulteranno da negare Sua Santit\u00e0 l'assolutione della quale il Duca di Niversa supplica Sua Santit\u00e0. Risoltezza --|gFol. 334v-339v.|tLettera contro Navarra e Navarristi Molto Beato Padre mio in Christo colendissimo --|gFol. 342r-402v.|tSquitinio delle libert\u00e0 Veneta nel quale s'adducono anche le raggioni dell'Imperio Romano sopra la Citt\u00e0 e Signoria di Venetia --|gFol. 403r-406v.|tDiscorso sopra la fragilit\u00e0 di Venetia --|gFol. 407r-408v. |tRaggionamento fatto dal Signore Nostro al Signore Cardinale Ludovisio intorno al successo della sequestrazione delle galere Pontificie in Napoli --|gFol. 409r-414r.|tRistretto delle colpe del Cardinale Clesel che hanno dato alla Maest\u00e0 dell'Imperatore, il Re Ferdinando di Bohemia e l'Arciduca Massimiliano --|gFol. 415r-418v. |tRaggionamento del Duca d'Alva alla Santit\u00e0 di Nostro Signore Papa Gregorio XV --|gFol. 419r-466v.|tRelatione politica della morte del Re di Suetia sequita nel fatto d'arme tra l'Imperiali e Suetesi nel d\u00ec 17 novembre 1632 descritta da un confidente di stato sua Maest\u00e0 Christianissima --|gFol. 472r-494v.|tDiscorso intorno alla dignit\u00e0 Imperiale nel quale si disputa se convenga supprimerla con trasferirne l'autorit\u00e0 nel sommo Pontefice Romano --|gFol. 496r-575v.|tRelatione di Roma fatta dal clarissimo Raniero Zeno Ambasciatore per la Republica di Venetia presso il Sommo Pontefice --|gFol. 576r-594v. |tAvvertimenti dati in voce dalla Santit\u00e0 di Nostro Signore Papa Gregorio Decimo Quinto all'Illustrissimo e Reverendissimom Signore Cardinal Lodovico Lodovisio suo nipote --|gFol. 596r-603r.|tScrittura per li nipoti de' Papi intorno al modo di conservarsi la potenza -- |gFol.604r-617r.|tConsideratione per servitio di un Cardinale Prencipe --|gFol. 617v-621r.|tConsideratione se sia bene che un Cardinale Prencipe giovane di et\u00e0 venga a stare a Roma dal Principio del Cardinalato o pure se ne stia a casa sua per qualche anno --|gFol. 621r-|tElencus gestorum a regibus et principibus Gallorum et Franconiae pro Ecclesia Romana. Regiones atque urbes a regibus Gallorum Francorumque Ecclesiae Romanae attributae -- |gFol. 634r-635v.|tCopia di lettera scritta da Brusselle con il manifesto publicato nell'entrata dell'armi Cattoliche nella Francia e la presa della Cappella -- |gFol. 636r-637r.|tFernando per gratia di Dio Infante di Spagna Luogotenente, Governatore e Capitan Generale dei Paesi Bassi e di Borgogna etc."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, August 2006."], "561": ["This book was once part of the Bellarmine Library at Montepulciano, as evidenced by the coat of arms of Cardinal Robert Bellarmine, librarian of the Vatican, as well as by a note on the title page that reads \"Di casa Bellarmini portato da Montepulciano l'anno 1704.\" It was part of the Guilford collection, sale 8th December 1830, lot 586. It came into the hands of Sir Thomas Phillipps, where it received his ms. no. 7711."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (watermark: a bird on a \"trimontium\" enclosed within a circle), fol. iii + 641 (original foliation present in upper right corner, often cropped) + i; collation indiscernible due to tightness of binding. Some catchwords present.", "Layout: Written in 20-37 long lines in 4 hands.", "Script: Written in cursive by several hands. One scribe is responsible for the bulk of the text, fol. 1r-494v (written in larger letters, 22 lines per page) and fol. 634r-637r (much smaller writing, 37 lines per page), and appears to have penned the chapter-heading for the \"Relatione\" found on fol. 496r-594v, even though he didn't write the text himself for that chapter. The second scribe (fol. 496r-621r) has a much more flowery hand with many ascending and descending loops. The third scribe (fol. 622r-633r) has a neater hand with rounded letters; he also adds many ascending and descending loops. A fourth hand wrote the index on fol. iirv. This hand is the least legible.", "Decoration: The text is largely without decoration, exept for the large Roman lettering for the chapter headings. The second scribe (fol. 496r-621r), however, has a penchant for adding decorative elements to his chapter headings (fol. 596r, 604r, 617v) and to the end of his texts (fol. 603r, 621r). The decoration on fol. 603r is particularly striking, as it depicts a fanciful dragon- like bird created with pen swirls and flourishings. The third scribe also adds a swirly decorative element to the end of his text (fol. 633r).", "Binding: Bound in contemporary vellum with gilt panelled sides and fan ornaments in the inner corners. Cardinal Robert Bellarmine's coat of arms in gold tooling on the front and back covers.", "Origin: Since the main scribe was evidently working no later than 1635 (date mentioned on fol. 118v), which is more than a decade after Cardinal Bellarmine's death, it is likely that these works were gathered together by his brother Thomas or one of his elder sons, who had them bound and stamped with the Cardinal's coat of arms. It is possible that Cardinal Bellarmine himself could have gathered together the works that take place before 1621, and that they were then recopied and included in this volume after his death.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 228."], "700 1": ["Bellarmino, Roberto Francesco Romolo,|cSaint,|d1542-1621.", "Bedmar, Alfonso de la Cueva,|cmarqu\u00e9s de,|d1572-1655.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "LEADER": ["00000ctm 2200000 a 4500"], "600 00": ["Henry|bIV,|cKing of France,|d1553-1610.", "Philip|bII,|cKing of Spain,|d1527-1598.", "Charles|bV,|cHoly Roman Emperor,|d1500-1558.", "Francis|bII,|cKing of France,|d1544-1560.", "Paul|bIII,|cPope,|d1468-1549.", "Louis|bXIII,|cKing of France,|d1601-1643.", "Maximilian,|cArchduke of Austria,|d1558-1618.", "Ferdinand|bI,|cHoly Roman Emperor,|d1503-1564."], "090 8": ["Robbins MS 228"]}, "RobbinsMS127": {"001": ["ocm84650513"], "245 10": ["[Confessionale] ;|bDe eruditione confessorum."], "040": ["CUL|eamremm|cCUY"], "003": ["OCoLC"], "505 0": ["Fol. 1r-14r: \"[text] Quoniam omni confitenti necessarium est hanc generalem confessionem...scilicet furtum vel homicidium. Fuit perfectus liber hic XXIII mensis dezembris circa octavam horam noctis anni MCCCCLXXXX\"; fol. 14v-20v: \"[rubr.] Incipit tractatus Magistri Iohannis de Gersonno cancellarii parisiensis De erudcione confessorum [text] Etsi virtus quam assuefactio gignit certius quam ars operetur...ille plus exercendo et orando quam legendo erudietur atque proficiet. Et sic finis huius tractuli.\""], "035": ["(OCoLC)84650513"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=75;fullview=yes"], "008": ["060725s1490 sp 000 0 lat d"], "099": ["Robbins MS 127"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart."], "100 1": ["Escobar, Andr\u00e9s de,|dd. ca. 1431."], "546": ["Latin."], "506": ["RESTRICTED ORIGINAL.|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Ownership marks of two previous 20th cent. owners on cover : one on front cover reads \"S. III, 6 Andreas de Escobar 49732679\"; one on spine reads \"732679 III M\". On front pastedown in pencil is written \"Andreas de Escobar Gerson Dated (fol. 14) 1490 Ms. 6.\""], "500": ["Ms. codex.", "Title to first text supplied by cataloger; title to second text from rubric (fol. 14v).", "Collation: Paper (similar but not identical to Briquet, \"Main\" 11165), fol. i (modern paper) + 20 + i (modern paper); 1\u2074 2\u00b9\u2076 ; vertical catchword in red box on fol. 5v.", "Layout: Written in 26 long lines, above top line; frame ruled in ink.", "Script: Written in cursive libraria script by one hand; opening word of each paragraph written in gothic script.", "Decoration: 2-line initials in red; some section and paragraph marks; red rubric on fol. 14v.", "Binding: Modern blue paper over pasteboard (paper decorated to look like oil paint). Reinforcement around the binding on fol. 5v and fol. 20v.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 127."], "700 1": ["Gerson, Jean,|d1363-1429."], "005": ["20080129054118.0"], "LEADER": ["00000ctm 2200000La 4500"], "260": ["[Spain?],|c1490."], "300": ["|3Original:|a20 leaves :|bpaper ;|c250 x 143 (135 x 81) mm bound to 211 x 151 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-5) and positive (Robbins MS 127)"]}, "RobbinsMS297": {"001": ["ocn465503880"], "245 10": ["Kit\u0101b al-Wiq\u0101yah."], "040": ["BOL|eamremm|cBOL"], "003": ["OCoLC"], "505 0": ["Fol. iv-viii: [Table of Contents] -- fol. 1v-227v: \"[Wiq\u0101yat al-riw\u0101yah f\u012b mas\u0101\u02bcil al-hid\u0101yah] Bism... \u1e25amd man ja\u02bbala al-\u02bbilm ajall al-maw\u0101hib al-han\u012byah wa-asn\u0101- h\u0101... wa-ba\u02bbd fa-inna al-walad al-a\u02bbazz \u02bbUbayd All\u0101h, \u1e63arrafa All\u0101hu ayy\u0101ma-hu f\u012b-m\u0101 yu\u1e25ibbu-hu wa-yar\u1e0d\u0101-hu, lamm\u0101 faragha min \u1e25af\u1e93 al-kutub al-adab\u012byah... [expl.] yawm al-arba\u02bb\u0101\u02bc f\u012b aw\u0101khir \u1e62afar min shuh\u016br sanat i\u1e25d\u00e1 wa- sitt\u012bn wa-alf min hijrat man la-hu al-\u02bbizz wa-sharaf [i.e. , AH 1061].\" -- fol. 228r-231v: \"Mas\u0101\u02bcil shatt\u00e1. Kit\u0101bat al-akhras wa-\u012bm\u0101\u02bcu-hu bi-m\u0101 yu\u02bbrafu bi-hi aqr\u0101ru-hu bi- na\u1e25wi tazawwuj wa-\u1e6dal\u0101q wa-b\u012b\u02bb wa-shir\u0101\u02bc wa-wa\u1e63iyat waq\u016bd \u02bbalay-hi... [expl.] wa-li-l-sh\u0101b al-\u02bb\u0101lim an yataqaddama \u02bbal\u00e1 al-shaykh al-j\u0101hil wa-li-\u1e25\u0101fi\u1e93 al-Qur\u02bc\u0101n an yakhtima f\u012b arba\u02bb\u012bn yawman min multaqan.\" -- fol. 233v-263v: \"[Kit\u0101b al-Far\u0101\u02bci\u1e0d] Bism... q\u0101la Ras\u016bl All\u0101h, \u1e63all\u00e1 All\u0101h \u02bbalayhi wa-sallam, ta\u02bballam\u016b al-far\u0101\u02bci\u1e0d wa-\u02bballim\u016b-h\u0101 al- n\u0101s, fa-inna-h\u0101 ni\u1e63f al-\u02bbilm... [expl.] wa-q\u0101la \u02bbAl\u012b wa- Ibn Mas\u02bb\u016bd yarithu ba\u02bb\u1e0du-hum min ba\u02bb\u1e0din ill\u0101 mimm\u0101 waritha kullu w\u0101\u1e25idin min-hum min m\u0101li \u1e63\u0101\u1e25ibi-hi.\""], "260": ["[S.l.],|c1652."], "008": ["091113s1652 xx 000 0 ara d"], "099": ["Robbins MS 297"], "246 0": ["Wiq\u0101yat al-riw\u0101yah f\u012b mas\u0101\u02bcil al-hid\u0101yah"], "100 1": ["Ma\u1e25b\u016bb\u012b, \u02bbUbayd All\u0101h ibn Mas\u02bb\u016bd,|dd. 1346 or 7."], "546": ["Arabic."], "520": ["A 17th-century collection of texts on \u1e24anaf\u012b jurisprudence , copied by Mu\u1e63\u1e6daf\u0101 b. \u02bbAl\u012b, dated \u1e62afar 1061 (= February 1651) on folio 227v and Mu\u1e25arram 1062 (= January 1652) on folio 263v. Main text in naskh\u012b script, commentaries in nasta\u02bbl\u012bq script irregularly distributed in the margins; commentary not fitting on the page was continued on elaborately-shaped inserts. Fly leaves contain notes in Turkish and a detailed table of contents at the end of which the sources for marginal commentary are given."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title from table of contents (fol. iv).", "Layout: Main text written 15 lines to the page with red catchwords, all within a green frame; abundant commentaries arranged in irregular, wedge-shaped sections radiating from the main text and filling a larger green frame which surrounds the smaller green frame on all sides.", "Script: Main text written in a black calligraphic naskh\u012b script; commentaries written in a minute nasta\u02bbl\u012bq script.", "Decoration: Main text surrounded by a green frame; commentaries also surrounded by a larger green frame.", "Binding: Red morocco binding with flap and blind-tooled medallions.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 297."], "583": ["|zCataloged from existing description and in hand by Alexandre M. Roberts, November 2009."], "005": ["20091113052130.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)465503880"], "300": ["263 leaves :|bpolished paper ;|c205 x 130 mm."]}, "RobbinsMS159": {"001": ["06-B4199"], "260": ["[Rome?,|cbetween 1750 and 1799]"], "505 0": ["Pp. i-53: \"[title] Praxis Romanae Curiae Anno Domini 1759. Breve prattica della Curia Romana. [chapter title] Del giudizio esecutivo [text] Per fare un giudizio esecutivo bisogna prima d'ogni altra cosa far la citazione contra jura nel modo seguente...Ci\u00f2 per\u00f2 secondo la contingenza del fatto\" ; p. 54: blank ; pp. 55-74: \"[chapter title] Del giudizio sommario [text] Doppo il giudizio esecutivo succede immediatamente il guidizio...e successivamente per la proposizione della causa in piena segnatura nel modo dato di sopra\" ; pp. 75-85: \"[chapter title] Del giudizio ordinario [text] Terminato il giudizio sommario ed esecutivo resta solo discorrere dell'ordinario...Del resto il tenore della commissione dell'Appellazione, Articoli ed Interrogatorii non si \u00e8 qui espresso per brevura potendosi facilmente vedere nel Ridolfino (?), dove latamente si vede\" ; pp. 86-87: blank ; p. 88: \"[title] Requisita subhastationis [text] Requiritur quod constet de vero eredito...Quod bona estimentur\" ; pp. 88-89: \"[title] Formula cuiuslibet extractus faciendi [text] In nomine Domini amen. Hec est copia publica omnium et singulorum actionum factorum...Mandato di dette (?) spese tassate\" ; p. 90: blank ; pp. 91-106: Intimatis in forma Sequestri and other formae ; pp. 104-105: blank ; pp. 107-112: \"Index productionum quae fieri debet in iudicio\" ; pp. 113 -116: \"[title] Functiones publice in singulos dies ordinarios hebdomade ordine alphabetico distribute [text] Assertamentum in Capitolio fit die Martis et sabbati...Plena signatura fit per singulas bis hebdomadas. Finis\" ; pp. 117-121: \"[text] Cit. ad dicendum contra iura in actis producta et repetita...ad formam iurium de quibus in actis quoniam citato eodem Adrio (?) [-------] sub die. Pro cit[ation]ibus (?)\" ; pp. 122-143: blank."], "520": ["A collection of formulae for legal motions in the Roman Curia."], "300": ["145 pages :|bpaper ;|c194 x 132 (192 x 130) mm bound to 198 x 141 mm."], "510 4": ["Phillipps, T. Cat. ms.|c6106."], "852 8": ["CUL|bRBCAG|hRobbins MS 159|xCIN=JKN"], "008": ["060830q17501799it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Breve prattica della Curia Romana"], "245 00": ["Praxis Romanae Curiae."], "546": ["Italian and Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "561": ["Once in the hands of one Pietro Paolo Mignola (note on p. 86 \"Petrus Paulus Mignola Romanus, 1787\"). Bookplate of Frederick North, Earl of Guilford on front pastedown (depicts a shield supported by two dragons rampant with spread wings, gorged and chained, with an earl's crown; within the shield is a lion surrounded by three fleurs-de- lis; the motto reads \"La vertu est la seule noblesse\"). Manuscript was once in the collection of Sir Thomas Phillipps (his no. 6106). On back pastedown in pen is written the name \"Pietro Moreschi.\""], "500": ["Ms. codex.", "First title from title page (p. i); added title from first page of text (p. 1).", "Collation: Paper (watermark similar to Briquet \"Etoile,\" 6089), pp. i + 145 (last page is pastedown); 1\u00b9\u2074 2\u00b9\u2076 3\u00b9\u2076\u207d\u207b\u00b2\u207e 4-5\u00b9\u2074. Quires signed 1-5 in ink on the first folio of each gathering in the top right-hand corner; catchwords at the end of each quire. Near-contemporary pagination in ink that skips the title page and starts at the second folio; from there it continues regularly, even between quires 3 and 4 where 2 folios are missing, and ends at p. 106.", "Layout: Written in up to 30 long lines.", "Script: Written in a rushed cursive script by at least 5 hands: First hand pp. 1-66; second hand: pp. 66-76; third hand; pp. 76, 89; fourth hand: pp. 77-85, 88, 92-103, 106- 116; fifth hand: 117-121.", "Decoration: Some simple decorative elements below title on title page (p. i)", "Binding: Vellum over pasteboard.", "Accompanying materials: Inserted ms. leaf concerning Petrus Paulus Mignola tipped in between pp. 112 and 113 (now in manuscript file).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 159."], "700 1": ["Mignola, Pietro Paolo.|4asn|4fmo|5CUL.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL.", "Moreschi, Pietro.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 159"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS193": {"001": ["ocn775600441"], "245 10": ["An clericis licitum vel illicitum sit emere frumentum pro faciendo pane venale per conductas personas in suis propriis domibus et furnis circumscripta eorum necessitate quod si illicitum quo iure divino ne an humano."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Alessandro degli Angeli was a Jesuit who taught philosophy and theology at the Collegio Romano. His major work, In Astrologos Coniectores Libri Quinque, saw six printings. This present work is an unpublished canon law question concerning whether a cleric may buy grain for the making of \"pane venale\" (bread for sale) by people brought into his dwelling for that purpose. The item is foliated 962- 971, indicating that this 10 folio gathering was once part of a larger text or collection of texts."], "300": ["|3Original:|a10 leaves :|bpaper ;|c275 x 210 (235 x 160) mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS)"], "510 4": ["Phillipps, T. Cat. ms.,|c7583."], "260": ["Rome, Italy,|c1610."], "099": ["Robbins MS 193"], "581": ["\"Alexandre de Angelis,\" in Augustin de Backer & Alois de Backer, Biblioth\u00e8que des \u00c9crivains de la Compagnie de J\u00e9sus vol. 5, Li\u00e9ge: Imprimerie de L. Grandmont-Donders, 1859 (viewed on Google Books, 2012 February 7); Lynn Thorndike, A History of Magic and Experimental Science vol. 6, pp. 202-04, New York: Columbia University Press, 1941."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Once part of a manuscript in the library of Sir Thomas Phillipps (his no. 7583), now disbound and separate. Robbins MS 191 contains material disbound from the same manuscript."], "500": ["Single unbound gathering.", "Title from fol. 962r (i.e. fol. 1r)", "Collation: Paper (watermark similar, but not identical, to Briquet \"oiseau\" 12210 and 12211), fol. 10 (foliated 962- 971 in brown ink in earlier hand); 1\u00b9\u2070.", "Layout: Written in 33 long lines.", "Script: Written in a neat early modern hand.", "Binding: Unbound.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 193."], "035": ["(OCoLC)775600441"], "008": ["120208s1610 it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez, February 2012."], "100 1": ["Angeli, Alessandro degli,|d-1620."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20120208111931.0"], "505 0": ["Fol. 1r-8v: \"[header] Reverendi patris Alexandri de Angelis theologi Societatis Iesu pro veritate requisiti\" ; \"[title] An clericis licitum vel illicitum sit emere frumentum pro faciendo pane venale per conductas personas in suis propriis domibus et furnis circumscripta eorum necessitate quod si illicitum quo iure Divino ne an humano\" ; \"[text] Respondeo id non esse illicitum iure Divino neque positivo neque naturali...sed probant ius divinum non posse usu mutari apertam itaque committunt aequivocationem ac proinde nihil concludunt\" ; fol. 9r-10v : blank."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS163": {"001": ["ocn244300045"], "245 10": ["Discorsi super disp[utationes] matrimon[iales]"], "040": ["BOL|eamremm|cBOL"], "520": ["A collection of documents and letters on marriage, mostly by Paolo Bombino. Only the first work (fol. 1r-13v) is by one Franciscus Ciarpius. Most works address the question of granting dispensation from the impediment of marriage in the case of people who are related in legal ways other than by consanguinity (e.g. a father in law and daughter in law). A few of these documents relate to the Duke and Princess of Mantua. Manuscript bears contemporary foliation 135 to 249 which means it once was part of a larger manuscript. In addition, section numbers 3, 4, 5 and 6 appear on fols. 1r, 15r, 25v and 47v respectively, also indicating that this was once belonged to a larger work."], "300": ["|3Original: |a117 leaves:|bpaper ;|c320 x 218 ( 235 x 115 ) mm bound to 324 x 230 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 08-137) and positive (Robbins MS 163)"], "510 4": ["Phillips, T. Cat ms.|c5445."], "260": ["Italy,|c17th century."], "099": ["Robbins MS 163"], "100 1": ["Bombino, Paolo,|dca. 1575-1648."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Bookplate of Frederick North, Earl of Guilford on front pastedown (his no. 251/5). Manuscript was also in the collection of Sir Thomas Phillipps (his no. 5445)."], "500": ["Ms. documents.", "Title from spine.", "Collation: Paper (similar but not identical to Briquet, Oiseau 12250) fol. i + 145 + fol. ii; collation indiscernable.", "Layout: Written in 23 long lines.", "Script: Written in a cursive script by two hands: hand one fol. 1r-13v; hand two fol. 15r to end.", "Decoration: One 7-line decorative \"T\" drawn with the same pen as wrote text, in a square border and decorated with a floral pattern (beginning second document, fol. 15r.)", "Binding: 18th century green marbled vellum back and fore edges, gray and blue marbled panels. Red morocco and gilt spine label.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 163."], "035": ["(OCoLC)244300045"], "008": ["080822q16001699it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2008."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "546": ["Latin and Italian."], "003": ["OCoLC"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5BOL."], "005": ["20080822124558.0"], "505 0": ["Fol. 1r-13v: \"Discursus super dispensatione matrimoniali\" (Franciscus Ciarpius) -- fol. 15r-25r: \"Breve resolutione del questio se il sommo Pontefice pu\u00f2 dispensar nell'impedimento del primo grado di affinit\u00e0 in linea retta ne matrimonii dove si mostra che vi sia stato dispensato altre volte\" -- fol. 25v-36v: \"Responsum de certitudine possibilitatis dispensandi in impedimento in primo gradu recta linea, et de eius convenientia, si iustae et rationabiles causae afferantur\" -- fol. 36v-47r: \"Quaesitum theologicum super canone decimo Concilii Aurelianensis [---] de incestis\" -- fol. 47v-59r: \"Solutione di cinque dubii contro a quello che il Padre Bombini ha allegato in materia di dispensa in primo di affinita tra gli ascendenti et descendenti\" -- fol. 59r- 86v: \"Additio ad primum responsum Patris Pauli Bombini S. D. N. exhibitum cum aliqui Patri Bombino nunciassens [?] nescio quem dicere ea Canonis verba. Hactenus instituta non dissoluantur. Non id velle [ut?] coniugia ad illud usque tempus contracta non dissolvantur\" -- fol. 86v-91v: \"Della giustitia delle cause, della dispensa fra i ser[enissi]mi signori Duca e Principessa di Mantova socero e nuora\" -- fol. 91v-95v: \"Obiectiones ab emi[nentissi]mo Barberino proposita Patri Bombino [die 1o Iulii?] contra potestatem dispensandi in primo gradu affinitatis in linea recta cum suis solutionibus ab eodem Bombino datis\" -- fol. 95v-103r: \"An causae sufficientes adsint ad dispensandum inter serenissimos socerum et nurum Mantuanos\" -- fol. 103r-105r: \"Item de causis strictius et nervosius\" -- fol. 105v-111r: Letter to the Bishop of Mantua from Bombino -- fol. 111r-114r: Letter from Bombino to Luigi Contarini -- 114r-116v: \"Risposta a chi oppone l'infelicit\u00e0 de matrimonii contratti con dispenza\"."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS246": {"001": ["06-B3678"], "245 10": ["[Regulations issued by Baldovino de' Monti governor of Narni concerning matters of jurisdiction and fees for legal services]"], "505 0": ["Fol. 2r-2v: \"[prologue] Havendo l'Illustrissimo et Excellentissimo Signor el Signor Baldovino de' Monti della magnifica citta' di Narni e suo governo Governatore...tutte et singule le cose necessarie et opportune suppleno ogni defetto\"; fol. 2v-4r: \"[text] Sportole. In prima per sportole nelli cause capitali per homicidio o per assolutoria della pena de la forca o altra pena...per iuramento iudiciale decisivo se paghino baioche duoi al giudice\"; fol. 4v-6r: \"[text] Cancellaria. Alla cancellaria ciascuno inquisito per risponedere all'Inquisitione et dati la segurta'...e non se possano rogare nelle cause civili in modo alcuno\"; fol. 6rv: [text] Sigillo. Li sigilli in tutte le supplicazioni per la qual si voglia...de tutti li processi in cancelleria de la comunita'\"; fol. 6v-11v: \"[text] Essequtori. All'essequtori per prigionia un carlino il giorno per cause criminale et quando di ragione...de detta citta' che se cavano del bussolo secondo e solito e non altri notarii\"; fol. 11v: [subscription] Ita dicimus et observari mandamus nos Baldovinus de Montibus (autograph signature). Datum Romae die xxv mensis Augusti 1554. Vincentius Grottus secretarius\"; fol. 12r: [notarial subscription] \"In nomine Domini amen. Anno a nativitate eiusdem Domini millesimo quinquagentesimo quanquagesimo quarto indictionis duodecima mensis Septembris...de verbo ad verbum perlegi...et signum apposui et me hic subscripsi rogatus et requisitus (a \"signum tabellionis\" follows).\""], "520": ["The introduction that precedes the regulations deplores the absence of an orderly fee structure in the administration of the law in Narni (near Perugia, Italy); the governor, having heard many complaints from various parties, cancelled all previous regulations and proclaimed a new set of regulations henceforth to be observed uniformly in the whole territory. The text is divided into 57 numbered paragraphs, grouped under the following main headings: Sportole, Cancellaria, Sigillo, Essequtori. The regulation defines fees as well as jurisdiction and procedure. On fol. 12r there is the autograph subscription by the chancellor of Narni (\"Laurentius Mataratius, publicus apostolica et imperialis auctoritate notarius...nunc scriba et cancellarius civitatis Narnie\"), that certifies that this is an official copy, made on September 20th, 1554, while the text is said to have been written in Rome on August 25th, 1554. On fol. 11v there is the autograph signature of the governor Baldovinus de Montibus, followed by the his paper seal and by the signature of the secretary: \"Vinc[entiu]s Grottus\""], "246 1": ["Tassa Baldovina"], "300": ["14 leaves : |bpaper ;|c235 x 160 (180 x 125) mm bound to 235 x 160 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 246|xCIN=JKN"], "008": ["060802s1554 it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Italian."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "100 1": ["Ciocchi del Monte,|cBaldovino,|dca. 1550-1555."], "500": ["Ms. codex.", "Title supplied by cataloger; added title from front cover.", "Collation: Paper, fol. 14; 1\u00b9\u2074. The chapters are numbered but the pages are not numbered.", "Layout: Written in 23-24 long lines, above top line. Ruled in brown ink.", "Script: The text is written in a formal cancelleresca script, by one hand. The notarial subscription is by another hand.", "Binding: The manuscript is sewn into a limp vellum leaf, which contains a papal document written in papal chancery minuscule. The document is addressed by Pope Julius III (Pope from 1550 to 1555) to the archbishop of Trier, and is dated 1554.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 246."], "090 8": ["Robbins MS 246"], "260": ["[Narni,|cSeptember 20th 1554]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS146": {"001": ["ocm85182288"], "245 10": ["Institutiones iuris canonici /|cauctore Melchiorre Picarozzi, utriusque iuris professore in venerabili Seminario Tusculano."], "040": ["CUL|eamremm|cCUY"], "520": ["The Institutiones iuris canonici by Professor Melchiorre Picarozzi of the Seminario Tusculano in three books (2 volumes)."], "300": ["|3Original:|a2 v. (170, 176 leaves) :|bpaper ;|c195 x 134 ( 164 x 115) mm bound to 200 x 146 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-13) and positive (Robbins MS 146)"], "260": ["Rome,|c[between 1770 and 1825]"], "099": ["Robbins MS 146"], "100 1": ["Picarozzi, Melchiorre."], "003": ["OCoLC"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Bookplate on the front pastedown in both volumes reads \"Monsignor Grimaldi Luogotenente dell' A.C.\""], "500": ["Ms. codex.", "Title from tile pages (fol. 2r in both volumes).", "Collation [Volume 1]: Paper (watermark depicts a bird atop a trimontium and the initials \"BM,\" all enclosed within a circle, with the city name \"Ascoli\" below), fol. 170 (contemporary foliation in ink that starts over at the beginning of each book; incorrect foliation in first book as fol. 40, 45, 48 are each repeated twice); 1-4\u2078 5\u2076 6-7\u2078 8\u2076 9-21\u2078 22\u2076.", "Collation [Volume 2]: Paper (same as above), fol. i + 176 (contemporary foliation in ink that begins at 98, because it is a continuation of the text in vol. 1, and starts over at the beginning of each book); 1\u00b9\u2070 2\u2078 3\u2076 4\u00b9\u2070 5\u2076 6\u00b9\u2070 7\u2076 8\u00b9\u2070 9\u2076 10\u00b9\u2070 11\u2076 12\u00b9\u2070 13-15\u2076 16\u00b9\u2070 17\u2076 18\u00b9\u2070 19\u2076 20\u00b9\u2070 21\u2076 22\u00b9\u00b2.", "Layout: Written in 20 long lines.", "Script: Written in a cursive script by one hand that gets noticeably messier towards the end of the second volume.", "Binding: Vellum over pasteboard. Edges colored in mottled red and green. Titles on spines of vols. 1 and 2 read, respectively, \"Institut/ Iur. Canon/Lib. I.II./Par.I.\" and \"Institut/ Iur. Can/Lib. II P. II./Liber III.\"", "Origin: According to his own author statement (fol. 2r) Melchiorre Picarozzi was a professor of both laws at the Seminario Tuscolano, which is located in Frascati, just South East of Rome. The Seminario Tuscolano was founded in 1770 by Henry Benedict Stuart, Cardinal Duke of York.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 146."], "035": ["(OCoLC)85182288"], "505 8": ["Volume 2: Fol. 2r: \"[title] Institutiones iuris canonici...Liber secundus pars secunda\" ; fol. 3r-105r: \"[text] Sequitur tractatus de sacramentis...qui ad hanc rem plura spectantia desiderat adire poterit Benedictum XIV loco supra citato\" ; fol. 105v: blank ; fol. 106rv: Index to Book Two Part Two ; fol. 107r-108v: blank ; fol. 109r: [title] Institutiones iuris canonici...Liber tertius\" ; fol. 110r-170v: \"[text] Liber tertius Institutionum iuris canonici Titulus primus De beneficiis eclesiasticis (sic)...a venationibus clamorosis publicis spectantis aliisque que clerico [---] ordinem non quadrant que eis desiderung (?) videri poterunt apud Vannes[---] Reinfestum (?) aliosque perplures\" ; fol. 171rv: Index to Book Three ; fol. 171v-176v: blank."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=83;fullview=yes"], "008": ["060823q17701825it 000 0 lat d"], "583": ["|zCataloged in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "546": ["Latin."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080129054118.0"], "505 0": ["Volume 1: Fol. 2r: \"[title] Institutiones iuris canonici...Liber primus\" ; fol. 3r-26r: \"[text] Prolegomenon in institutiones iuris canonici\" ; fol. 26v- 65r: [text] Liber primus Institutionum canonicarum Titulus primus De iuris canonici divisione...et aedificent cunetos (?) tum fidei scientia quam operum disciplina\" ; fol. 65v- 66v: blank ; fol. 67rv: Index to Book One ; fol. 68r-69v: blank ; fol. 70r-167r: \"[title] Institutiones iuris canonici...Liber secundus pars prima [text] Liber secundus Titulus primus De rebus ecclesiasticis earumque divisione...ita disposuit Clemens III capitulum de homicidio\" ; fol. 167v: blank ; fol. 168r: Index to Book Two Part One ; 168v-170v: blank."], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS150": {"001": ["06-B4345"], "245 10": ["Glossae singulares Decretalium."], "505 0": ["Fol. 1r-149r: \"[Niccol\u00f2 de' Tudeschi, Glossae] [rubr.] Incipiunt glossae singulares et nobiles Decretalium...quas dominus meus dominus Nicolaus abbas nunc archiepiscopus Panormitanus in lecturis suis ac scriptis commendat quas ego recollexi in scolis dum cum in studio senensi audiebam et eas demum melius recolexi eius lecturas et scripta studendum. De constitucionibus. [text] Cognoscentes. Nota quod dapnum et retractacio actus sunt...gloria nobilem fi[nis?] hic quantum tene menti. [rubr.] Et hic est finis omnis glosse...ad declaracionibus...factus per reverendum in Christo patrem...archiepiscopum Panormitanum de Cicilia famosissimum doctorum doctorem hodie vero Sancte Romane Ecclesie cardinalem....et optatum finem pro laboribus consequtur. Amen. [subscription] Antonius Abellonis clericus Maioricensis utriusque iuris studens me scripsit in Basilea durantem sacro concilio anno 1441 in mense vero Marcii.\""], "505 8": ["Fol. 150r-162v: \"[Alfonso de Madrigal, Tractatus quatuordecim conclusionum contra clericos concubinarios] [text] Quoniam ubi maius periculum uertitur ibi cautius est agendum...in curia romana nec tam eis [...]//\"", "Fol. 164r-167v: \"[Antonius de Butrio, Commentaria in Decretales] [rubr.] Incipit summa decem libri secundum dominum Antonium de Butrio. [text] Postquam de rebus undecumque et de spectantibus ad clericos...finis adest. [rubr.] Explicit summula decem libi decretorum fratris dompmni (sic) Antonii de Butris...amen.\"", "Fol. 167r-169r: \"[Juan Alfonso de Benavente, Tractatus de redemptione captivorum] [rubr.] Incipit brevis tractatus de [...]ia redemptionis captivorum...per Sarracenos perfidos detemptore. [text] Primo excolenae (?) huius...est Agustinus in libro de providentia (?). [rubr] Explicit brevis tractatus de [...] redempcionis captivorum per Sarracinos...quem composuit Iohannes Alfonsus de Benavente...anno domini 1444....fratris Nicolai de Valziona ...in civitate Salamantine...anno Domini 1444...\"", "Fol. 169v-182v: \"[Juan Alfonso de Benavente, Repetitio de penitentia] [text] Gaudiorum celestium operatores ac animarum zelatores...alliis casibus supra notatis. [rubr.] Istam reportationem fecit Iohannes Alfonsus de Benavente decrettorum doctor...in Salamantino studio octava die Madii anno domini 1451.\"", "Fol. 183r-183v: \"[Alvarus Pelagius, Tractatus de sacrilegio] [rubr.] Incipit tractatus de sacrilegio compositus per dominum fratrem Alvarum. [text] Queritur (?) quid est sacrilegium, quibus modis...sit benedictus in secula seculorum amen.\"", "Fol. 182v-184r: \"[Notes] Nota dictum abatis...Nota quod iudex...Nota quod lis...id quod continet...\""], "520": ["This manuscript seems to be a collection of transcripts of lessons regarding various aspects of Canon Law; these lessons took place in Spain, mainly at the University of Salamanca, in the mid 15th century. Several scribes (up to five) completed the task of copying this manuscript. It is a sort of textbook, a record of the lessons elaborated by former law students, in order to make the notes taken while listening to the professor more legible and easier to remember. The pastedown inside back cover is a scrap from a manuscript containing the \"Epistulae\" of St. Jerome, copied by a tidy 15th century humanistic cursive hand: it shows a part of the epistula 14."], "100 0": ["Niccol\u00f2,|cde' Tudeschi, Archbishop,|d1386-1445."], "852 8": ["CUL|bRBCAG|hRobbins MS 150|xCIN=JKN"], "700 0": ["Alfonso,|cde Madrigal.", "Giovanni,|cda Benevento."], "260": ["Spain,|c1441-1454."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio: |asecundum"], "546": ["Latin."], "008": ["060906i14411454sp ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a184 leaves :|bpaper ;|c295 x 220 (225 x 160) mm bound to 300 x 225 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 97-13) and positive (Robbins MS 150)"], "561": ["The manuscript was at some point in the 15th century in Spain, according to the Spanish vernacular notes on the back flyleaf."], "500": ["Ms. codex.", "Title from the opening rubric, fol. 1r.", "Collation: Paper (Watermark very similar to Briquet \"Anneaux,\" 689), fol. 184 + i; 1-2\u00b9\u00b2 3\u00b9\u00b2\u207b\u00b3 4-11\u00b9\u00b2 12\u00b9\u00b2\u207b\u2074 13-15\u00b9\u00b2. Catchwords in the right-hand corner of the lower margin, on verso. Contemporary foliation in the right corner of the bottom margin, on recto, in Roman numerals: it starts from fol. 34. Quire numbers in red ink, in the right corner of the bottom margin: a lower-case latin letter followed by a Roman numeral (numbers from i to vi, only halfway through the quire.)", "Layout: Fol. 1r-149r, written in long lines; fol. 150r, written in two columns, 45 lines for each column. Frame ruled in lead.", "Script: Fol. 1r-149r, written in cursiva bastarda; fol. 150r-184r, written in cursiva libraria script.", "Decoration: Red rubrics and red paragraph marks throughout.", "Binding: Alumed leather over wooden boards; two metal clasps on the lower board. The binding is probably the original 15th century one.", "Origin: Fol. 1r-149r: written iin the year 1441 by the scribe Antonius Abellonis from Majorca: fol. 149r: \"Antonius Abellonis clericus Maioricensis utriusque iuris studens me scripsit, in Basilea durante sacro concilio anno MCCCXLI in mense vero Marcii.\" Fol. 167r-169r, written by Nicolaus de Valziona in Salamanca, in the year of 1454. None of the scribes is listed in the \"Colophons\" by the Benedictins du Bouveret. Fol. 169v-182v, copied in the year 1451. Nevertheless, some of these dates seem to refer rather to the year when the lessons were delivered than to the year when they were copied.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 150."], "700 1": ["Butrio, Antonius de,|d1338-1408.", "Pelagius, Alvarus,|d1280?-1353.", "Benavente, Juan Alfonso."], "090 8": ["Robbins MS 150"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=87;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS263": {"001": ["06-B3747"], "610 20": ["Catholic Church.|bPope (1555-1559 : Paul IV)"], "505 0": ["Fol. 1r-6r: \"[title] Cause et ordine con il quale si \u00e8 proceduto fra Paolo IIII et Henrico Re di Franza per devenire alla collegation della lega che hanno raffirmato insieme [text] Essendosi quasi in uno istesso tempo fatta la creatione di Papa Paolo IIII et sequita la dissolutione dello Abboccamento...Mando anco Sua Maesta ad accordare il Duca di Ferrara concedendogli in tempo di guerra quanto gli era stato promesso et in tempo di pace denari (?) 100 a l'anno\" ; fol. 7r-11v: \"[title] Cagioni le quali ponno haver indotto il Papa Paulo IIII alla rottura con l'Imperatore e col Re suo figlio [text] Che non ostante che essendo lui in minoribus et habbia fatto sempre professione di vero ecclesiastico...perche con i fatti di maggior importanza e di maggior danno hano (sic) dimostrato loro intentione et mala volonta\" ; fol. 12r-14r : \"[title] Cagioni le quali hanno condutto gli Imperiali alla rottura contra Papa Paolo IIII [text] Prima l'esser stata casa Caraffa anticamente di fattione Francese et nelle guerre et divisioni del Regno di Napoli...ma tutte queste ragioni lasso da parte et le rimetto nel giuditio delle [---] del mondo sperando che Sua Santita non sera che non hanno fondamento et si distora da simil pensieri\" ; fol. 15r-16v: \"[title] Negotiatione ded Cardinal Carafa fatta con la Signoria di Venetia del 1556 il mese di Decembre et Genaro [text] La prima audienza hebbe dalla Signoria senza l'intervento delli Signori Capi et ringratio Sua Santita delle tanti offitii che havea fatto accio la pace potesse seguire...Che la pace qui non poteva seguire perche fino all'hora le tregue deveano esser rotte, et esortava Sua Santita a non perdere questa occasione\" ; fol. 17rv: \"[text] Il Cardinal Caraffa fu non ieri l'altro mandato a chiamar da questi signori per darli la risposta la quale per le precedenti mie io ho scritto...et che lui mai se partiva da quel che \u00e8 giusto et commendibile\" ; fol. 18r: '[text (crossed out)] Nelle [---] de primo che larmata del turco usciva nel regno de Napoli...et che darano la Puglia et darano per pegno Ravenna et Cervia secondo il solito mio\" ; fol. 18v-19v: blank."], "520": ["These apparently unpublished summaries of the European political scene from 1555-1557 take the position of condemning Cardinal Marcantonio Colonna, who was accused of being a disobedient rebel and excommunicated by Paul IV. Persuant to Colonna's excommunication, Paul IV's nephew, Carlo Carafa - mentioned several times in the present manuscripts - was made a cardinal. The later foliation in Arabic numerals at the tail edge of each folio (123-128; 129-136; 145-[149]), as well as the section headings in Roman numerals at the head edge of the first folio of each section (X, XI-XII, XV-XVI), indicate that these bifolia were once bound together. Before they were bound together into one codex (now disbound), a former owner folded some of the individual sections and wrote the title on the outside (fol. 6r, 18r), along with the numbers \"10\" and \"5,\" respectively."], "300": ["19 leaves (unbound sets of bifolia) :|bpaper ;|c340 x 221 (293 x 184) mm."], "510 4": ["Phillipps, T. Cat ms.,|c21133."], "852 8": ["CUL|bRBCAG|hRobbins MS 263|xCIN=JKN"], "561": ["Manuscript once belonged to Lord Guilford, and later passed into the collection of Sir Thomas Phillipps (his ms. 21133). On fol. 16v written upside down on tail edge are the numbers \"501,\" \"512\" and \"501.5.8.\""], "260": ["Rome?,|cca. 1557."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060808s1557 it ||||||||||||00|||ita|d"], "245 00": ["[4 manuscripts pertaining to the conflict between Emperor Charles V and Pope Paul IV]"], "546": ["Italian."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, August 2006."], "600 10": ["Colonna, Marco Antonio,|d1535-1584.", "Carafa, Carlo,|dca. 1517-1566"], "500": ["Ms. fragment.", "Title supplied by cataloger.", "Collation: Paper (fol. 1-18 watermark similar, but not identical to, Briquet \"Noms,\" 12059; fol. 19 watermark similar, but not identical to, Briquet \"Croix latine,\" 5683), fol. 19 (various folioations: in Arabic numerals in the center of tail edge, 123-128; 129-136, 145-[149]; modern pagination in pencil in top right hand corner, on recto only, 101-127, 145-153); collation indiscernible because disbound.", "Layout: Written in 23 long lines.", "Script: Written in a cursive script by one hand. Fol. 1r- 16v in a very neat hand; fol. 17rv written in a very messy hand with many corrections; fol 18r written in the same messy hand, but text crossed out.", "Documents are likely contemporary with the events being described. The author's condemnation of Colonna and his sympathetic view of Carafa indicate his allegiances in these political matters. The heavy corrections on fol. 17rv and the crossing out of the text on fol. 18r suggest that this particular section was a working copy, later to be copied out again neatly like the rest of the sections.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 263."], "700 1": ["Guilford, Francis North,|cBaron,|d1637-1685.|4asn|4fmo |5CUL.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 263"], "600 00": ["Charles|bV,|cHoly Roman Emperor,|d1500-1558.", "Paul|bIV,|cPope,|d1476-1559."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS168": {"001": ["06-B4372"], "245 10": ["Vita di Francesco Conforti /|cscritta da Teodoro Monticelli ex Abate Celestino di S[an] Pietro a Majella della citt\u00e0 di Napoli."], "505 0": ["Fol. 3r-12v: \"[title] Vita di Francesco Conforti [text] Tramandate ai posteri la storia de chiarissimi uomini...ed alla virt\u00f9 per opera dell'immortale Napoleone e del degno di lui Augusto Fratello Giuseppe\" ; fol. 13r-16v: End notes ; fol. 17r-20v: ruled but blank."], "520": ["A biography of Francesco Conforti focusing on his involvement in the revolution of Naples of 1799. The author, Teodoro Monticelli, is described as \"Ex Abate Celestino di S. Pietro\" (Monticelli was also a mineralogist)."], "300": ["20 leaves :|bpaper ;|c295 x 192 ( 263 x 165) mm bound to 230 x 203 mm."], "510 4": ["Phillipps, T. Cat. ms.|c6127."], "852 8": ["CUL|bRBCAG|hRobbins MS 168|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (his no. 6127) and of Frederick North, Earl of Guilford (his bookplate on front on front pastedown depicting a shield supported by two dragons rampant with spread wings, gorged and chained, with an earl's crown; within the shield is a lion surrounded by three fleurs-de- lis; the motto reads \"La vertu est la seule noblesse\"). At base of spine is a small, round green sticker (6 mm in diameter). In the bottom left-hand corner of front cover is a beige sticker (12 mm in diameter) containing the number \"399.\""], "008": ["060907s1806 it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Italian."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "100 1": ["Monticelli, Teodoro,|d1759-1845."], "600 10": ["Conforti, Gianfrancesco,|d1743-1799."], "500": ["Ms. codex.", "Collation: Paper (watermark depicts a donkey with small wings above the letters \"GBI\"), fol. ii + 20 + ii; collation indiscernible due to tightness of binding.", "Layout: Written in 37 long lines; frame-ruled in lead.", "Script: Written in a neat cursive script by one hand.", "Binding: Half-leather and printed brown paper over pasteboard; title on spine reads: \"Monticalli Vita di Fr. Conforti--1806--MS.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 168."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "090 8": ["Robbins MS 168"], "260": ["Naples (Italy),|c1806."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS23": {"001": ["ocn245539783"], "245 10": ["Relazione della corte o sia Curia Romana nello stato in cui si trova nel corrente anno 1766 /|cOpera di Giovanni Domenico Goffoii Romano, maestro di lingue e gia agente nella medesima corte."], "040": ["BOL|eamremm|cBOL"], "520": ["An account of the organization and functioning of the various branches of papal administration under Clement XIII (1758-1769) and his predecessors. It includes detailed descriptions of the four branches of the Roman Curia: political, ceremonial, curial, and judiciary. The author, a professor of languages in Rome, was also an agent in the Curia and thus derived first-hand knowledge of papal matters from frequenting the courts and congregations of the Roman Curia."], "300": ["|3Original:|a384 pages :|bpaper ;|c266 x 196 (230 x 125) mm bound to 330 x 215 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-96) and positive (Robbins MS 23)"], "260": ["Rome,|c1766."], "099": ["Robbins MS 23"], "100 1": ["Goffoii, Giovanni Domenico."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Once in the possession of a certain John Bellows of Gloucester (pink label inside back cover reads \"John Bellows, Gloucester, steam press, Reference no. [not given]\")."], "500": ["Ms. codex.", "Title from title page (fol. 1)", "Collation: Paper, pp. 384 (page numbering starts on the first page of text, after the index on fol. 4); 1-16\u00b9\u00b2; catchwords on the verso of each folio.", "Layout: Written in 22 long lines. Margins ruled by folding.", "Script: Written in a neat cursive script by one hand.", "Binding: Unbound quires. When acquired, manuscript was bound in vellum over pasteboard with individual gatherings separated from one another and from the cover. Lower edge of back cover stained red. Title on spine on paper label reads \"Relazione della Curia Romana nel 1766 Opera di Giovanni Domenico Goffoii.\" During conservation treatment this binding was removed and unbound quires are now kept in a protective box. Binding and full conservation treatment report are in manuscript file.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 23."], "600 00": ["Clement|bXIII,|cPope,|d1693-1769."], "035": ["(OCoLC)245539783"], "610 20": ["Catholic Church.|bCuria Romana."], "008": ["080905s1766 it 000 0 ita d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "546": ["Italian."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080905022250.0"], "505 0": ["Fol. 1r: \"[title] Relazione della corte o sia Curia Romana nello stato in cui si trova nel corrente anno 1766. Opera di Giovanni Domenico Goffoii Romano, maestro di lingue e gia agente nella medesima corte\" ; fol. 2r-3v: Index ; pp. 1-370: \"[text] Proemio. Siccome le api per fare il miele scorrono per i giardini e succhiano il meglio dai fiori pi\u0300\u00f9 prelibati...E qui f\u00f2 fine, parendomi d'aver detto abbastanza per istruzzione di quelli signori e forestieri che bramano d'essere informati dello stile della Corte di Roma tanto decantata in ogni dove\" ; last three fols. blank."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS199": {"001": ["ocn244307169"], "260": ["Rome,|cbetween 1769 and 1770."], "040": ["BOL|eamremm|cBOL"], "520": ["A collection of documents relating to the sale and purchase of salt between the Basilica of Sant'Antonino in Parma and the Monastery of Chiaravalle della Colomba in Alseno."], "510 4": ["Phillips, T. Cat ms.|c10409."], "099": ["Robbins MS 199"], "245 00": ["Documenti del capitolo della basilica di Sant'Antonino per la causa del sale."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (his no. 10409). Front cover also bears a paper label that reads \"No. 23\" in faded orange-ish pen, and also \"C.R. Etat no. 9...(22)\" in brown pen; front pastedown reads, in pencil, \"10409 Ph\" (i.e the Phillips catalog number) and \"B17.185\"; back pastedown reads \"199\" in pencil."], "500": ["Ms. documents.", "Title from title page; added title from front cover.", "Decoration: Handwritten notarial signs on fols. 26r, 32v and 42v; present are also three distinct stamped notarial signs: one is found on the recto of fols. 14-20, 29-30, 34, 36, 38, 40, 42, 44, (top left); a second is found on fols. 35r (bottom left), 38v, 41r (left middle); a third is found on fol. 45v (left, a third of the way down the page).", "Binding: Bound in faded printed paper (mottled red ground with yellow and brown blotches) over pasteboard; spine frayed. Cover bears paper label with title \"Iura Ill \u0303mi Cap.li Insig.is Basi.cae St \u0303i Antonini Plac.tiae\".", "Accompanying materials: Two printed bills of sale, competed in pen, dated 7 August and 28 September 1770 (fol. 3); seals on fols. 12, 32, 35, 37, 38.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 199."], "035": ["(OCoLC)244307169"], "610 20": ["Basilica di Sant'Antonino (Piacenza, Italy)", "Chiaravalle della Colomba (Abbey : Alseno, Italy)"], "246 04": ["Iura ill[ustrissi]mi cap[ito]li insig[n]is basi[li]cae S[anc]ti Antonini Plac[en]tiae"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "008": ["080822i17691770it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2008."], "546": ["Latin and Italian."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080822053157.0"], "300": ["47 leaves :|bpaper ;|cbound to 295 x 194 mm."], "LEADER": ["00000ntc 2200000Ia 4500"]}, "RobbinsMS62": {"001": ["ocn690705464"], "260": ["Italy,|c1800s."], "040": ["BOL|eamremm|cBOL"], "520": ["Indexes of letters from the pontificates of Pius V, Gregroy XIII, Urban VIII, Innocent X, Alexander VII, and Benedict XIII. The first item--the index of letters of Pius V--was copied from the edition by Fran\u0328cois Goubau printed in Antwerp in 1640 by Balthasar Moreti."], "510 4": ["Phillipps, T. Cat. ms.,|c5357."], "099": ["Robbins MS 62"], "245 00": ["[Indexes of apostolic letters]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 5357)."], "500": ["Ms. codex", "Collation: Fol. x + 506 (last leaf is pastedown; foliated 1-505 as fol. 44 was skipped); gatherings mostly in 12s; gatherings signed 1-46 with the last few quires unsigned.", "Layout: Written in long lines; number of lines per page varies.", "Script: Written in a neat script by various hands.", "Binding: Vellum over pasteboard. Spine reads: \"Manoscritto. Indice di lettere apostoliche. M.S.\" At base of spine is the number 10; on the front cover is the number 2 (crossed out).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 62."], "035": ["(OCoLC)690705464"], "505 0": ["Fol. 1r-29v: \"Index apostolicarum S[ancti] Pii V Pontif[icis] Max[imi] epistolarum quas a Ioanne Antonio Gabutio conscriptas quinque libris consignatas in lucem edidit Franciscus Goubau Antuerpiae ex officina plantiniana Balthassaris Moreti 1640. Bibliotheca Vaticana MSS vero adservanti in Archivio Secreto Vaticano.\" Fol. 30r-57v: blank."], "505 8": ["Fol. 58r-69r: \"Index tomi iv et v epistolarum S[anctissi]mi D[omi]ni Nostri Gregorii XIII ad viros principes et alios anno pontificatus sui iv et v.\" Fol. 70r-93v: blank.", "Fol. 94r-352r: Indexes of letters of Pope Urban VIII \"ad viros principes et alios\": fol. 94r-112v: index to vols. 1 -2 (1st year of his pontificate) \"Ioanne Ciampolo Secretario\"; fol. 114r-125v: index to vol. 3 (2nd year of his pontificate); fol. 126r-143r: index to vol. 4 (3rd year of his pontificate); fol. 144r-153r: index to vol. 5 (4th year of his pontificate); fol. 156r-168v: index to vol. 6 (5th year of his pontificate); fol. 170r- 181v: index to volume 7 (6th year of his pontificate); fol. 182r -197r: index to volume 8 (7th year of his pontificate); fol. 198r-211r: index to volume 9 (8th year of his pontificate); fol. 212r-223r: index to volume 10 (9th year of his pontificate); fol. 224r-234r: index to volume 11 (10th year of his pontificate); fol. 236r-247r: index to volume 12 (11th year of his pontificate); fol. 248r-255v: index to volume 13 (12th year of his pontificate); fol. 260r-277r: index to vols. 14 and 15 (13th and 14th years of his pontificate); fol. 278r-292v: index to vols. 16 and 17 (15th and 16th years of his pontificate); fol. 294r- 312r: index to vols. 18 and 19 (17th and 18th years of his pontificate); fol. 314r-352r: index to vols. 20, 21 and 22 (19th, 20th and 21st years of his pontificate).", "Fol. 354r-362v: Index of letters of Pope Innocent X.", "Fol. 365r-388v: Indexes of letters of Pope Alexander VII \"ad viros principes et alios\": fol. 365r- : index to vol. 1 (1st year of his pontificate) \"Natale Rondanino secretario\"; fol. 391r-403v: index to vol. 2 (2nd year of his pontificate); 405r-414r: index to vol. 3 (3rd year of his pontificate), part 1; fol. 417r-448v: index to vols. 3 (part 2), 4 and 5 (3rd, 4th and 5th years of his pontificate).", "Fol. 454r-505r: Index of letters of Pope Benedict XIII \"ad principes.\""], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "700 0": ["Pius|bV,|cPope,|d1504-1572.", "Gregory|bXIII,|cPope,|d1502-1585.", "Urban|bVIII,|cPope,|d1568-1644.", "Innocent|bX,|cPope,|d1574-1655.", "Alexander|bVII,|cPope,|d1599-1667.", "Benedict|bXIII,|cPope,|d1649-1730."], "008": ["101208q17241799it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Alexandre M. Roberts and Jennifer K. Nelson, December 2010."], "546": ["In Latin"], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20101208040807.0"], "300": ["|3Original:|a506 leaves :|bpaper ;|c270-280 x 195-205 mm, bound to 285 x 205 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-53) and positive (Robbins MS 62)"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS37": {"001": ["06-B3653"], "245 10": ["[Digestum novum cum Glossa ordinaria Accursii]"], "505 0": ["Fol. 1r-181v: \"[text] // agrorum siccantorum causa facta quintus...idem quin duo pro solito heredes esse non possunt. Idem//."], "520": ["The manuscript is acephalous and incomplete. Bottom of fol. 1-2, 26-59 worn; fol. 24-26 cut but repaired; large pieces cut from fol. 23, 110, 116, 117; the fol. after 169 was torn off. It seems to have been the working and studying copy of many different people, being full of marginal and interlinear notes by various hands regarding both the text and the Accursian gloss."], "100 0": ["Justinian|bI,|cEmperor of the East,|d483?-565."], "852 8": ["CUL|bRBCAG|hRobbins MS 37|xCIN=JKN"], "700 0": ["Accursius,|cglossator,|dca. 1182-ca. 1260."], "008": ["060801q12801320fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["181 leaves :|bparchment ;|c403 x 255 (265 x 113) mm bound to 140 x 260 mm."], "561": ["According to a note in an exquisite 18th or 19th-century hand pasted on the inside of the back cover, this manuscript is supposedly the first volume of a two-volume work produced in England no later than the early 12th century, but most probably in the mid 13th century. The note refers to volume two of the set (now Robbins MS 36) as including several ownership marks, some of which are of the late 14th century; the note also says that that book at some unspecified date was also in the possession of a priest from Chicheley. The whole note is wrong on many counts: although it is probably true that Robbins MSS 36 and 37 were considered to be a set in the 15th century (judging from the fact that both contain notes in an English hand), they were surely not written at the same time or in the same place. On inside front cover, written in pencil by a 20th century hand: \"begins in O.39.I.4\"."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 181 + i (modern paper), 1-3\u00b9\u00b2 4\u00b9\u00b2 (lacks one fol.) 5\u00b9\u2070 6-7\u00b9\u00b2 8\u00b9\u00b2 (lacks one fol.) 9-10\u00b9\u00b2 13\u00b9\u00b2 (lacks one fol.) 14\u00b9\u00b2 15\u2076 16\u00b9\u2070 17\u2074. No original foliation is provided, and no quire numbering. Catchwords in the bottom margin on the right side, possibly by the hand of the scribe.", "Layout: Fol. 1r-176v, written in two columns on 47 lines; fol. 177r-181v, written in 42 long lines. The text is surrounded by an extensive marginal gloss of up to 104 lines.", "Script: Written in textualis libraria script, by apparently two scribes for the text and possibly one for the gloss. The text is written in black ink while the gloss is written in brown ink.", "Decoration: Some chapter headings written in 8-line capital or uncial letters, in blue penworked in red. Red and blue 2-line initials throughout the text. Red rubrics; red and blue paragraph marks in the text and and red ones in the gloss. Many line-fillers in brown ink. The manuscript abounds in marginal drawings, some of them associated with hunting and the military profession: fol. 36r and 140r, hare hunting; fol. 106r, soldiers climbing a ladder; fol. 106v, man and woman holding hands; fol. 106, harnessed horse; fol. 115v, torso of a horse; other drawings on fol. 109r, 100rv, 113v, 126rv, 129rv, 134r, 139r, 141v, 174v (a list of drawings is provided on the inside of the back cover, in pencil, by a 20th century hand.)", "Binding: Dark brown paper over pasteboard; quarter bound in brown leather. Gold-tooled title on spine: \"Digestum Novum Saec. XIV. I.\". Front cover detached.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 37."], "090 8": ["Robbins MS 37"], "260": ["[France,|cbetween 1280 and 1320]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=26;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS7": {"001": ["05-B14290"], "245 10": ["Summa decretalium."], "520": ["Bernard of Pavia's compendium of his Breviarium Extravagantium, his compiled work of Gratian's Decretum, organized into 5 books."], "LEADER": ["00000ctm 2200000 a 4500"], "510 4": ["Phillips, T. Cat. ms. |c6331.", "De Ricci, |cp. 505.", "Kuttner, Stephan G., Repertorium der kanonistik 1140-1234, |cp. 338."], "260": ["[Italy, |cca. 1225]"], "581": ["Bermardus Papiensis, Bernardi Papiensis Faventini Episcopi Summa Decretalium, ed. Ernst A. T. Aspeyres (Regensburg: J. Manz, 1860; reprint, Graz: Akademische Druck- und Verlagsanstalt, 1956)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["At one time in the possession of Henry Drury, who had it bound in the early nineteenth century, as evidenced by a note on fol. ir: \"MS. in membranis Bernardi Decretalium. An Ancient MS. and evidently not written by the same hand. Bound for me by the only binder C. Lewis. H. Drury 1822.\" Sir Thomas Phillipps also owned it, having purchased it at the Drury sale (note on f. iiv \"Phillipps MS 6331\"). In 1935 it passed into the hands of Jacques Rosenthal; thereafter it was successively acquired and sold by Otto H. V. Vollbehr of Washington D.C. (his MS 6), and John Howell (in 1956)."], "500": ["Ms. codex.", "Title from spine.", "Collation: Parchment, fol. ii (paper and parchment) + 82 + i (paper); 1-9\u2078 10\u00b9\u2070 11\u2078; catchwords visible on quires 1 and 2, trace of catchword visible on quire 7.", "Layout: 34-38 long lines; ruled in dry point and ink; prickings visible.", "Script: Written in a transitional Gothic script by several hands.", "Decoration: Capital letters and titles in red ink; some small letters in brown ink traced in the margins before the capitals were executed; red penwork lion on inner margin of fol. 58r.", "Binding: Stamped leather binding with gilt edges. Gilt title stamped on spine: \"Bernardus Summa Decretalium MS in pergamena\"; codex housed in a portfolio inside a cloth box with leather spine (title stamped on spine of box: \"Bernardus Summa Decretalium Manuscript on vellum XIIIth Century).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 7."], "300": ["|3Original:|a82 leaves :|bparchment ;|c285 x 185 (225 x 125) mm bound to 292 x 190 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-16) and positive (Robbins MS 7)"], "530": ["Selected digital images available in Digital Scriptorium."], "650 0": ["Canon law."], "100 0": ["Bernard,|cof Pavia."], "852 8": ["CUL|bRBCAG|hRobbins MS 7|xCIN=JKN"], "008": ["051104s1225 it ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, November 2005."], "546": ["Latin."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "505 0": ["Fol. 1r-82r: \"[rubr.] Gloria patri est filius sapiens [text] Profectus discipuli gloria magistri qui non lucernam doctrine celare sub modio non verbi frumentum abscondere...Ei autem qui est alpha et omega bonorum omnium de nostris scriptis gratiam referamus Hec ego Bernardus genuit quem clara papia mitto sed emendet socii rogo vestra sophia qui Decretales ad opus comune redegi sub titulis summam, nunc christo dante peregi.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=103;fullview=yes"], "090 8": ["Robbins MS 7"]}, "RobbinsMS262": {"001": ["06-B3568"], "245 10": ["Remarques sur plusieurs articles de la cout[ume] d'Artois et sur quelques questions de droit pratique."], "505 0": ["Pp. 1-956: \"[text] par l'ordinance de 1667 les enquetes...le dix Julliet 1738\"; pp. 957-960 blank; pp. 961-1028: Table des matieres (alphabetical index of subjects)."], "520": ["This manuscript contains notes on the articles of Law in Artois: each of the 210 discussed articles is followed by his commentary on it, together with additional commentary by an untraced \"H\" citing new cases. Several marginal notes in the outer margins."], "300": ["|3Original:|a1044 pages :|bpaper ;|c300 x 175 (245 x 100) mm bound to 305 x 185 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 08-122) and positive (Robbins MS 262)"], "852 8": ["CUL|bRBCAG|hRobbins MS 262|xCIN=JKN"], "008": ["060727q17501760fr ||||||||||||00|||frm|d"], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "546": ["Middle French."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "100 1": ["Hebert, Guislaume Fran\u00e7ois,|dfl. 1695-1704."], "500": ["Ms. codex.", "Title from the title page.", "Collation: Paper, pp. iii + 1044 + i; 1-42\u00b9\u00b2 46\u2076. No catchwords. Contemporary pagination on the upper corner on both recto and verso, although the table of contents is not paginated.", "Layout: Written in 22 long lines, with 2-lines chapter headings.", "Script: Written in an elegant cursive script, possibly by one hand with light brown ink.", "Binding: Calf over pasteboard, possibly original. Defective spine, margins thumbed, edges painted in red. Marbled paper used as flyleaves.", "Origin: Written in France, between 1750 and 1760.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 262."], "090 8": ["Robbins MS 262"], "260": ["[France,|cbetween 1750 and 1760]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS105": {"001": ["06-B4200"], "245 10": ["[Decretales cum glossa Bernardi Bottoni]"], "520": ["The main text of the Decretales is surrounded by the gloss of the Italian law scholar Bernardo Bottoni. At the bottom of fol. 192r there are some additions in verse, written in a variety of late-13th and early 14th-century hand. A fragment from Boniface VIII's Liber sextus (Book V, chapter ii \"De homicidio\" at \"Prelatis vel clericis quibuscumque...\") is copied at the top of fol. 193v in a late 13th-century hand. The date of the papal bull copied on fol. 193r a is given as 6 June 1319. On fol. 194r-195v there is an alphabetical index of titles in the Institutiones, Codex, Digestum vetus, Digestum novum, and Infortiatum; at least one folio is missing here, as the index is incomplete, starting towards the end of the titles grouped under C and ending with titles grouped under S. A one-paragraph text mentioning the Franciscan order, copied in a late 13th or early 14th-century hand on the end pastedown, includes the date 1247; one of the marginal notes on fol. 192v, written in a late 13-century hand, includes the date 1293. On fol. 192r there is the amusing subscription by the scribe, a woman: \"Expliciunt Decretales per manus Gerdrudis que solebat ludere cum nudis.\""], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[Germany?,|cbetween 1275 and 1300]"], "246 2": ["|iSecundo folio: |anon retinuit"], "581": ["Decretales Domini Gregorii Papae IX suae integritati una cum glossis restitutae cum privilegio Gregorii XIII Pont. Max. et aliorum principum, Corpus iuris canonici 2 (Romae: In Aedibus Populi Romani, 1548)"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["At one time in the fourteenth century the book belonged to one Johannes (two partially erased notes written in a german hand, one at the top of end pastedown and one in the middle: \"Iste liber est Johannis[...] presbiteri ecclesie [...];\" a little further down the page there is a note mentioning the Franciscan order: \"...frater Io[hannes] ordinis fratrum Minorum minister generalis...datum anno Domino 1247...\"). From a partially Latin and partially German inscription at the bottom of the end pastedown, a German provenance might be inferred for the manuscript, or at least for the leaf used in binding."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. 195; 1-4\u00b9\u2070 5\u00b9\u2070\u207a\u00b2 6-19\u00b9\u2070 20\u2074\u207b\u00b9 (the last folio of the last quire is used as a pastedown). No contemporary foliation is provided. Modern 20th century foliation in pencil in the lower bottom margin. Catchwords in the right side of the bottom margin, on verso. Quire numbers in the middle of the bottom margin, on verso, in Roman numerals.", "Layout: The main text is written in two columns, 45 lines for each column. The marginal gloss which surrounds the text is written in up to 105 lines. Ruled in lead. Prickings visible in the upper and lower margins, as well as in the outer margins.", "Script: The main text is written in a textualis libraria script, quite close to the \"littera Parisiensis\". The surrounding gloss is written in a cursiva libraria script, quite tidy at the beginning, becoming steadily messier as it progresses. The text was apparently copied by one hand, while the gloss was certainly copied by almost three different hands, but contemporary to each other.", "Decoration: Fol. 1r, the opening words \"Gregorius\" and \"Firmiter\" are written in capital letters, with red and blue alternating pen flourishings; the first in on 7 lines, the second is on 4 lines. Red and blue running titles on the upper margins. Red and blue alternating penworked initials throughout, mostly on 3 lines. Alternating red and blue lombard initials on 1 line throughout. Red rubrics throughout.", "Binding: Vellum over wooden boards; clasps missing; of the supporting metal pieces only two are still affixed to the back cover. The binding could be a 14th century one. The remains of a red seal are visible on inside front cover.", "Origin: Possibly written in Germany, since the scribe names herself \"Gerdrudis\": nevertheless, the text is written in a script quite close to the \"littera Parisiensis\". A scribe named \"Gerdrudis\" of the same era is listed in Colophons, number 5354.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 105."], "300": ["|3Original: |a199 leaves :|bparchment ;|c350 x 245 (main text, 190 x 115) mm bound to 360 x 250 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-80) and positive (Robbins MS 105)"], "505 8": ["Fol. 192v: [Incertus auctor] \"[rubr.] Casus domino episcopo reseruati [text] Omnes excommunicationes tam a se quam a canone...tantum quod debita fiat restitutio de eisdem.\"", "Fol. 193r: [Johannes XXII, Bulla \"Cum nonnulle ecclesiastice\", Avignon, 5 January 1319]", "Fol. 193r: [Johannes XXII, Letter to Cardinal Bertrand de Montfauves, Archdeacon of Sologne, and Pierre Durant, Chaplain, Canon of Embrun, regarding the collection of ecclesiastical benefices, Avignon, 6 May 1319]", "Fol. 194r-195v: \"[Tabula titulorum operum Justiniani]"], "100 0": ["Gregory IX,|cPope,|dca. 1170-1241."], "852 8": ["CUL|bRBCAG|hRobbins MS 105|xCIN=JKN"], "700 0": ["John|bXXII,|cPope,|d-1334."], "008": ["060830q12751300gw ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "546": ["Latin."], "700 1": ["Bottoni, Bernardo,|d-1266."], "505 0": ["Fol. 1r-192r: \"[text] Gregorius episcopus servus servorum dei dilectis filiis doctoribus et scolaribus universis Parisius commorantibus salutem et apostolicam benedictionem. Rex pacificus pia miseratione disposuit...et a Romane Ecclesie consuetudine alienum ut pro spiritualibus facere quis homagium compellatur.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=66;fullview=yes"], "090 8": ["Robbins MS 105"]}, "RobbinsMS259": {"001": ["06-B3763"], "245 10": ["Le dodici Decretali clementine."], "505 0": ["Fol.1rv: \"[rubr.] Pensio pro paupere. [text] Clemens d[ilecto] f[ilio] Luce de Angulo. ..Hinc est hoc quod hos tibi...voluntatis infringere vel incursari.\""], "505 8": ["Fol. 1v-2r: \"Clemens. Hodie dilecto filio Luce de Angulo presbitero Cordubiensis pensionem annuam...plenius continetur quo circa.\" Fol. 2v blank.", "Fol. 3rv: \"[rubr.] Resignatio simplex super simplici [...]. [text] Clemens d[ilecto] f[ilio] officiali...dilecti filii Francisci Colonna presbiteri de illo quod tum...Datum Romae apud S[anctam] M[ariam] M[aiorem] anno 1714 decimo nono Kalendis Septembrii pontificatus nostri anno quintodecimo.\"", "Fol. 3v-4v: \"[rubr.] Resignatio simplex super [...]. [text] Clemens d[ilecto] f[ilio] magistro Francisco Colunne...Datum Romae apud S[anctam] M[ariam] M[aiorem] anno 1714 decimo nono Kalendis Septembrii pontificatus nostri anno xiiii.\"", "Fol. 5r-6r: \"Clemens dilecto filio Iohanni Baptiste Afferra Archidiacono...Litterarum scientia vite ac mortis honestas aliaque laudabilia...Datum Romae apud Sanctam Mariam Maiorem anno Incarnationis dominice millesimo septuagentesimo decimo octavo, quarto Idus Novembris pontificatus nostri anno decimo octavo.\"", "Fol. 6r: \"Clemens dilectis filiis magistro Carolo Cerro...Hodie dilecto filio Iohanni Baptistae Afferra archidiacono...ac de verbo ad verbum indulto...Datum etc.\"", "Fol. 7r: \"Clemens d[ilecto] f[ilio]...archiepiscopi Ispalensis...datum Romae apud S[anctam] M[ariam] M[aiorem] Kal. Martii anno xv .\"", "Fol. 7v: \"Clemens d[ilecto] f[ilio] Petro Marchioniae (?) canonico...et prebenda [.]exant et super eis indecisa.\" Fol. 8rv blank.", "Fol. 9r-10r: \"Clemens dilecto filio officiali...Archiepiscopo Mechiliniensis...pia mater recurrentibus ad eam...Datum apud S[anctam] M[ariam] M[aiorem] decimo septimo Idibus Iunii pontificatus nostri anno quintodecimo.\"", "Fol. 11rv: \"Clemens venerabili fratri Episcopo Segobricensi salutem. Dignum arbitramur et congruum ut illis...Datum Romae apud Sanctam Mariam Maiorem anno Incarnationis dominicae millesimo septuagentesimo sextodecimo pontificatus nostri anno sextodecimo.\"", "Fol. 11v-12r: \"Clemens d[ilecto] f[ilio] Francisco Antonio de Castro pretori P. E. sancti Martini ville de Arenado...vel assequente vel vacet exhorbitante devoluta.\"", "Fol. 13rv: \"Clemens d[ilecto] f[ilio] officiali venerabilis fratris mi Archiepiscopi Toletani salutem. Apostolica sedis circumspecta benignitas rigorem...Datum Rome apud Sanctam Mariam Maiorem anno Incarnationis dominice millesimo septuagentesimo sextodecimo, ponificatus nostri anno sextodecimo.\" Fol. 14rv blank.", "Fol. 15rv: \"Clemens d[ilecto] f[ilio] Georgeo Casalonz clerici Illerdensis...Datum Romae apud S[anctam] M[ariam] M[aiorem] anno Incarnationis Dominice millesimo septuagentesimo decimo septimo pridie Idus Aprilis pontificatus nostri anno decimoseptimo.\" Fol. 16rv is blank.", "Fol. 17rv: \"Clemens d[ilecto] f[ilio] Fideli Dominico Flore penitentiario...Datum Romae apud S[anctam] M[ariam] M[aiorem] anno 1719 decimo nono Kalendis Septembris anno decimo nono.\"", "Fol. 17v: \"Clemens d[ilectissimo] f[ilio] magistro Laurentio Vanniello...mandamus quatenus (?) mentionem. Datum etc.\"Fol. 18rv blank.", "Fol. 19r-20v: \"Clemens d[ilectissimo] f[ilio] magistro. Vite [...] super quibus dilectus filius Franciscus Emanuel de Liardes...dudum siquidem omnia beneficia ecclesiastica...Datum S[ante] M[arie] M[aiori] quinto Idus Decembris anno decimonono.\"", "Fol. 21r-22v: \"Clemens dilecto filio officiali...Archiepiscopi Compostellani salutem. Dignum arbitramur et cognovimus ut illis se reddar sedes apostolica...dilectum filium Gregorium Botana Pulleixo presbitero dicte diocesis qui unum de duo precipua simplicia...mandavissemus provideri. Datum S[ancte] M[ariae] M[aiori] Idus Iunii anno vigesimo.\"", "fol. 23r-24v: \"Clemens d[ilecto] f[ilio]. Vite ac morum honestas aliaque laudabilia probitatis et virtutum merita...\"Datum S[ancte] M[ariae] M[aiori] decimis Kal. Decembris anno xx.\""], "520": ["The manuscript looks like a collection of transcriptions of documents and letters issued by Pope Clement XI during his papacy, mostly concerning members of the Spanish and Belgian clergy. One of the recepients mentioned in the letters is a member of the clergy in Cordoba, and he is named Luca de Angulo. The documents deal with the allocation of yearly payments to poor clegymen (\"pensio pro paupere\"), donations, elections to church benefices, ecclesiastical revenues etc. At the end of most letters there is the word \"taxa\" followed by Roman numerals, possibly indicating the price paid for having the letter either copied or sent."], "100 0": ["Clement|bXI,|cPope,|d1649-1721."], "852 8": ["CUL|bRBCAG|hRobbins MS 259|xCIN=JKN"], "008": ["060808q17201750it ||||||||||||00|||lat||"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "300": ["24 leaves :|bpaper ;|c270 x 190 (230 x 140) mm bound to 270 x 190."], "500": ["Ms. codex.", "Title from the paper wrapper.", "Collation: Paper, fol. 24; 1-12\u00b2.", "Layout: Written in up to 30 long lines. Not ruled. there is no contemporary foliation.", "Script: Written by several hands mostly in a confused secretary script, sometimes barely legible.", "Binding: Bound with paper wrapper, with the title written in brown ink: \"Le dodici Decretali Clementine. Manoscritto inedito rarissimo che va unito all'innocensiano e stimato Luigi dieci. N[umero?] secondo.\"", "Origin: Written in Italy in the first half of the 18th century."], "090 8": ["Robbins MS 259"], "260": ["[Italy,|cbetween 1720 and 1750]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS139": {"001": ["ocm84650662"], "260": ["Italy,|cbetween 1707 and 1791."], "040": ["CUL|eamremm|cCUY"], "520": ["Collection of renunciations made by order of the Congregation of the Holy Office (The Holy Roman Inquisition). Some loose pages."], "300": ["|3Original:|a428 pages :|bpaper ;|c256 x 184 (225 x 147) mm bound to 267 x 198 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-10) and positive (Robbins MS 139)"], "008": ["060817i17071791it 000 0 ita d"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "003": ["OCoLC"], "245 00": ["Compendio di varie abiure fatte solennemente in Roma ed altrove per ordine della suprema Congregazione del Sant' Offizio."], "099": ["Robbins MS 139"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title from title page (p. 3).", "Collation: Paper (watermark depicts a bird atop a trimontium and the letter \"F,\" all within curved arms; a crown appears above and the name \"Ubaldo\" below), 430 pp. (text begins on p. 5 as front pastedown is assumed to be pp. 1-2 and the title page is pp. 3-4); 1-17\u00b9\u00b2 (first and last fol. are pastedown).", "Layout: Written in up to 33 long lines. Vertical marginal bounding lines in dry point.", "Script: Written in a cursive script by two hands.", "Binding: Bound in quarter leather and marbled paper over pasteboard. Title in gilt letters on spine \"COMPEND / DI ABIUR / FATTE / PER ORD / DEL S. OFF.\" Binding is quite worn.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 139."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "005": ["20080129054118.0"], "505 0": ["Pp. 5-33: \"Abiura de Sante Torri di Jesi, 1707\" ; pp. 34- 40: \"Delitti del P. Felice Luneri da Sarnano\" ; pp. 41-59: \"Abiura di Suor Maria Francesca Melchiori monaca in Sezze...settembre 1703\" ; pp. 60-69: \"Compendio del processo fatto fare dalla Congregazione della Suprema Inquisitione contro Paolo Antonio Galles di Giarace in Calabria...1708\" ; pp. 70-75: \"Copia della lettera originale scritta dal Penitentiere di Brescia al Vicario di S. Officio di Ravenna sopra gli errori scoperti in Brescia ne Pelagini di Beccarelli...1708\" ; pp. 76-90: \"Ristretto dell Abiura del P. Pietro Paolo di S. Giovanni Agostiniano scalzo...1698\" ; pp. 91-106: \"Compendio del processo... sopra la vita, azzioni ed opere di suor Maria Cristina Roccoles (?) monache del terzo ordine...1680\" ; pp. 107-111: \"Relazione di alcuni delitti ed enormit\u00e0 commessi dal Reverendo Padre (?) Filippo del Rio (?) curatore della parocchia di San Salvador della Motta di Zoro nella citt\u00e0 Bagliadolio (?)...1698\" ; pp. 112-174: \"Processo del Molinos 1687\" ; pp. 175-179: \"Notizie pi\u00f9 distinte cavate del Processo, che si conserva nell' Archivio di Roma della Suprema Inquisizione...\" ; pp. 180- 181: \"Breve relazione di ci\u00f2 che occorre nell' Abiura del Dott. Molinos e i suoi seguaci...Settembre 1685\" ; pp. 182 -216: \"Abiura di Dottor Simone Ambrosetti, seguace del Molinos...1687\" ; 216-260: \"Abiura di Antonio Maria Leoni, segauace del Molinos\" ; pp. 261-294: \"Processo concernente l'eresie e dogmi pratticati da Francesco Giu[- --] Borri\" ; pp.295-300: \"Relazione dell abiura del Borri...1661\" ; pp. 301-313: \"Abiurazioni delle abominevoli eresie del canonico Pandolfo Ricasoli, Don Giacomo Fantoni, Nicol\u00f2 Mozzetti, Don Carlo Scalandroni, Andrea Biliorti, Girolamo Mainardi e Faustina Mainardi sua sorella...1641\" ; pp. 314-336: \"Abiura di Giacinto Centini e suoi compagni...1635 ; pp. 337-340: \"Breve relazione de Beccavelisti di Brescia..1708\" ; pp. 341-415: \"Prosperit\u00e0 infelici di Francesco Canonici detto Mascombruni...composte dal Abbato Gio. Battista Rinalducii da Pesaro\" ; p. 415: \"Decreto della Congregazione del Sant' Officio contro il Cagliostro die 7 aprilis 1791\" ; pp. 416-424: blank ; pp. 425-426: Index ; pp. 427-428: blank."], "035": ["(OCoLC)84650662"], "546": ["Italian."], "LEADER": ["00000ctc 2200000La 4500"]}, "RobbinsMS225": {"001": ["06-B3885"], "245 10": ["Super usibus pheudorum."], "505 0": ["1. Fol. 1r-56r: \"[rubr.] Reportata domini Martini de Garata Laudensis utriusque iuris doctoris super usibus pheudorum. [text] In nomine Domini Dei. Quamvis in principio principiorum non soleat fieri continuacio...explicit liber primus feudorum Deo gratias amen.\"; fol. 56v-59v blank; 2. Fol. 60r-95v: \"[rubr.] Explicit liber primus incipit secundus de feudi cognicione et in quibus feudum consistat. [text] Hic incipit secundus liber feudorum. Cum totum opus in tres libros dividatur...sumus expediti de libro secundo huius operis. Amen.\"; fol. 96rv blank; 3. Fol. 97r-151v: \"[rubr.] Explicit liber secundus. Incipit tertius in quibus rationis (?) seu amictatis rubrica. [text] Hic incipit tertius liber et ultimus feudorum...laus Deo et Virgini Marie totique [...] triumphanti, amen. [rubr.] Finis. Explicit lectura super feudis compilata per dominum Martinum Laudensem utriusque iuris doctorem famosissimum.\""], "505 8": ["Fol. 151v-152v: \"[Additions and comments on the treatise by Martino Garrati] Hic secundum definit...si illud vaxallus perdit seu neglexit...per federum. Martinus Laudensis.\"", "Fol. 153r-174v: \"[Andrea d'Isernia, Summarium super usibus feudorum]. [rubr.] Summarium Andree de Ysernia super usibus pheudorum. [text] An feudum et vaxallus sint nomina nova vel Romanorum...aliter non se debet appellari. Deo gratias.\"", "Fol. 177r-179r: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Perusine civitatis statuto cavetur quod si filius...facili ut apparet. Responsio. Bartholus in civitate Pisarum.\"", "Fol. 179r-181v: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Quedam mulier habens patrimonium nupsit viro suo nulla dotis habita...et ista sufficiant pero nunc. Bartholus famosissimus.\"", "Fol. 181v-184v: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Per Italiam communiter sunt stata per que confitentes maleficia...disputata fuit hec questio per Bartholus de Saxoferrato anno Domini millesimo trigentesimo quinquagesimo primo die undecima mensis Decembris. Deo gratias amen.\"", "Fol. 184-188r: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Lapus fuit captus cui parte iudici et portatus in carceribus...in soluctione questionis. Bartholus doctor.\"", "Fol. 188r-190r: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Publicanus quidam a communi Perusii emit pedagium et omne fructus...Deo gracias. Disputatio domini Bartholi.\"", "Fol. 190r-193v: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Hic tractatus de duobus fratribus insimul habitantibus...iste tractatus de duobus fratribus non fuit completus per dominum Bartholum quia fuit morte preventus...\"", "Fol. 193v-196v: \"Octavo queritur quid si filius impendit circa primam...Explicit persequucio (sic) tractatus de duobus fratribus per Dominum Baldum.\"", "Fol. 196v: \"[Constitutiones Iuris glossed by Bartolo da Sassoferrato] Questio talis est. Iudex maleficiorum super accusacione coram eo...sit iudex ergo.\"", "Fol. 197r-205v: \"[Bartolo da Sassoferrato, Tractatus reprensaliarum] Reprensaliarum materia in frequens neque cotidiana...Deo gracias et semper dicamus Deo gracias. Amen. [rubr.] Explicit tractatus eprensaliarum editus per Bartolomeum de Saxoferrato ad utilitatem scolarium.\"", "Fol. 205v-208r: \"[Bartolo da Sassoferrato, Tractatus de insignis et armis] Horum gratia de insignis et armis que quis poterat...in rubeo et nigro. Deo gracias et sempre dico Deo gracias. [rubr.] Explicit tractatus de insignis et armis per dominum Bartholum de Saxoferrato.\"", "Fol. 208r-212v: \"[Bartolomeo da Sassoferrato, Tractatus de tyrannis] [rubr.] Incipit tractatus tirandorum (sic) editus per dominum Bartholum de Saxoferrato doctorem famosissimum. [text] Primo quero unde dicatur tirandus (sic)...semper dicamus infinitas gratias amen, amen, amen, amen. [rubr.] Explicit tractatus de tyranno editus per dominum Bartholomeum de Saxoferrato doctorem...requiescat in pacem. Amen.\"", "Fol. 215r-230r: \"[Collection of short explanatory pieces arranged as glossary on legal terminology, incomplete] Infantis nomine...emancipata...sibi illa quere//.\"", "Fol. 232r-240v: \"[Mattheus Antonii de Gualdo, Recollecta super secunda parte Digesti Veteris, incomplete] [rubr.] De accionibus emptis. [text] Si res vendita. Si venditor est in mora tradendi...ipse dicit quod si venditor//.\""], "520": ["The manuscript is a sort of \"miscellanea iuridica\". The main text appears to be the work of Martino Garrati from Lodi, Italy; a short commentary on it, written by Andrea d'Isernia, follows the main text. In the manuscript is found a collection of \"consilia\" from the Italian scholar Bartolo da Sassoferrato, an authority on Roman Law during the Middle Ages. At the end, there is a treatise on the Digestum Vetus written by Matthaeus Antonii de Gualdo. Some pen trials on fol. 231r read the year \"1458\", but there is no other evidence that the manuscript was written before this date, although it seems a reasonable 'terminus ante quem\"."], "300": ["242 leaves: |bpaper; |c290 x 215 (185 x 125) mm bound to 300 x 220 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 225|xCIN=JKN"], "700 0": ["Andrea,|cd'Isernia,|d1220?-1316?", "Bartolo,|cof Sassoferrato,|d1313-1357.", "Matteo,|cda Gualdo,|d14th cent.", "Ubaldi, Baldo degli,|d1327?-1400."], "008": ["060816q14501470it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "100 1": ["Garrati, Martino,|d15th cent."], "500": ["Ms. codex.", "Title from opening rubric, fol. 1r.", "Collation: Paper, fol. iii + 240 + iii; 1-4\u00b9\u2070 5\u00b9\u2074\u207b\u00b9 6\u2076 7- 9\u00b9\u2070 10\u2078\u207b\u00b9 11-12\u00b9\u2070 13-14\u00b9\u2074 15\u2078 16-17\u00b9\u2070 18\u00b9\u2074 19-20\u00b9\u2070 21\u00b9\u2070\u207b\u00b2 22\u00b9\u2070 23\u00b9\u2070\u207b\u2074 24\u00b9\u2070. There are at least six watermarks: a 'croix grecque' very close to Briquet 5575; a 'couronne' which seems a variant of Briquet 4742-4745; a 'char' very close, almost identical to Briquet 3539; a 'coulonne' very close to Briquet 4411; a 'mont' close to Briquet 11734; another 'mont' close to Briquet 11885, 11895, 11897. Catchwords by the hand of the scribe in the right side of the bottom margin, on verso, sometimes framed in brown ink. No contemporary foliation. Wrong 20th-century foliation in pencil on the upper right hand corner. Correct 20th century foliation in pencil in the bottom right hand corner.", "Layout: Written in up to 55 long lines, except from fol. 153r-174v, written in two columns, 46 lines for each column. Frame ruled in lead. Very wide margins; some additions and notes by contemporary hands.", "Script: Written in humanistica cursiva libraria script by at least 5 different hands, all contemporary with each other.", "Binding: Rebound in the year 1996 in full brown goatskin with titling in gold on the spine. The volume was resewn on split tawed thongs using original sewing holes.", "Origin: Written in Italy in the third quarter of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 225."], "090 8": ["Robbins MS 225"], "260": ["[Italy, |cbetween 1450 and 1470]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=98;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS36": {"001": ["06-B3641"], "245 10": ["[Digestum vetus cum Glossa ordinaria Accursii]"], "505 0": ["Fol. 1r-207v: [the incipit is not legible because it is faded]...etsi concubinam sibi adhibuerit idem erit comprobandum."], "520": ["A very interesting late 13th or early 14th century copy of the Digestum with the famous glossa by Accursius, also known as Glossa Ordinaria. The text was written in Italy, possibly Bologna, and glossed somewhere in Southern France. Occasionally, we can recognize a later English hand (mid 15th century) that wrote several tiny notes in the outer margins. Throughout the manuscript is visible a large number of grotesques and probationes calami with human heads, human bodies, real and fantastic animals, drawn in a surprisingly accurate way in pen, possibly by the scribe himself. The text of the Digestum and the Glossa Ordinaria are both surrounded with later additions and notes (marginal ones and interlinear ones) by various hands."], "710 2": ["University of Oxford."], "100 0": ["Justinian|bI,|cEmperor of the East,|d483?-565."], "852 8": ["CUL|bRBCAG|hRobbins MS 36|xCIN=JKN"], "700 0": ["Accursius,|cglossator,|dca. 1182-ca. 1260."], "008": ["060731q12901330it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["270 leaves :|bparchment ;|c400 x 200 (325 x 130) mm bound to 410 x 260."], "561": ["The manuscript was pledged by a student from Oxford by the name of Thomas Bykken in 1347, as is apparent from reading the ownership notes on fol. 270v. The book was put in the Warwick Chest at Oxford University by Bykken (whose name does not appear in the Register of Oxford scholars and students compiled by Emden) as collateral for a loan, as was a common practice at the time at Oxford (note on fol. 270v reads \"Cautio apud Thomam d[---] Bykken exponitur in cista de Warwycky in vigilia Paschae anno domini millesimo trecentesimo quadragesimo septimo. Et illa autem iacet pro apud (sic) [---] de Tymie pro una marce\"). Other pawn- broker notes are barely legible on fol. 270v. The manuscript also had a 17th-18th century owner, who wrote some marginal notes in English (e.g. on fol. 268r). This manuscripts used to have the same binding as Robbins MS 37 : the two manuscripts were clearly bound as a set by a former 19th century owner, and this manuscript was supposed to be the second one, which is why the Roman number \"II\" on the spine is there. Some notes written in pencil by a 20th century hand on the back flyleaf."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 270 + i (modern paper). No catchwords, no quire numbering and no contemporary foliation are provided. The collation seems to be impraticable because most folios have been cut and possibly resewn.", "Layout: The text is written in two columns of 60 lines, while the Glossa Ordinaria is written in two columns of 90 -92 lines. Ruled in ink and lead. The margins are very wide and mostly full of glosses. Cropped running titles on the upper margins. Visual aids in many different shapes throughout the text. No contemporary foliation and no catchwords are provided. Quires numbered in Roman numerals.", "Script: The text is written in textualis libraria script, very close to the Littera Bononiensis, while the Glossa of Accursius is written in a textualis libraria possibly from Southern France.", "Decoration: Red and blue paragraph marks throughout the text, black paragraph mark throughout the Glossa. Blue 3- line initials and red and blue 2-line initials, often penworked. Red rubrics, red and blue paragraph marks. Chapter headings written in capital or uncial blue letters, on 7 lines, penworked in red. Every single page shows an incredible amount of pen drawings which shows animals of all kind, mostly fantastic, as much as human beings in various attitudes, and many heads, legs or arms coming out of the written page. Line fillers in light brown and green ink.", "Binding: The former binding used to be in dark brown paper, hardback, leather spine and corners. Now the manuscript is bounded with pasteboard. On the leather spine is gold- tooled the title: \"Digestum vetus sec. XIV. II\".", "Origin: Written in Italy, possibly Bologna, at the very end of the 13th century or during the first decades of the 14th. Glossed in Southern France or by a scribe who was trained there.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 36."], "090 8": ["Robbins MS 36"], "260": ["[Bologna?,|cbetween 1290 and 1330]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=25;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS47": {"001": ["ocn457080425"], "245 10": ["Differentiae aliquot inter ius civile et ius Saxonicum in quattuor partes distributae."], "040": ["BOL|eamremm|cBOL"], "852": ["BOL|bRBCAG|xCIN=JKN"], "650 0": ["Roman law.", "Civil law.", "Law|zGermany|zSaxony.", "Comparative law."], "035": ["(OCoLC)457080425"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=33;fullview=yes"], "008": ["091019q15001599gw 000 0 lat d"], "099": ["Robbins MS 47"], "505 0": ["Fol. 1r-6r: \"[text] Prima pars differentias eas continens quae sunt circa contractus vel quasi obligationes atque actiones -- fol. 6r-15r: \"[text] Pars secunda continens differentias versantes circa testamenta ac ultimas voluntates. Item circa successiones ab intestato tam in bonis feudatibus quam allodialibus\" -- fol. 15r-fol. 25r: \"[text] Tertia pars continens differentias quae sunt circa ipsum ordinem seu processum iudicii\" -- fol. 25r-32v: \"[text] Quarta et ultima pars continens differentias quae sunt circa delicta, iniuria ac damna data eorumque poenas.\""], "100 1": ["Fachs, Ludwig,|d1497-1554."], "546": ["Latin."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "003": ["OCoLC"], "500": ["Ms. codex.", "Title from beginning of text (fol. 1r).", "Collation: Paper, fol. ii (modern paper) + 32 + ii (first leaf near-contemporary with manuscript, second modern); 1- 2\u2076 3-4\u00b9\u2070.", "Layout: Written in 32 long lines.", "Script: Written in a cursiva libraria script by one hand.", "Binding: Vellum over thick paper; bound by in-house conservator, August 2001. Full conservation treatment and binding report on file.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 47."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, October 2009."], "005": ["20091019043154.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "260": ["Germany?,|c1500s"], "300": ["32 leaves :|bpaper ;|c300 x 205 (245 x 150) mm bound to 310 x 210 mm."]}, "RobbinsMS67": {"001": ["ocn722953581"], "245 10": ["Epitome canonum"], "040": ["BOL|eamremm|cBOL"], "520": ["Manuscript contains the Epitome canonum (Summary of Canon Law) by K\u014dnstantinos Harmenopoulos, plus various other texts on church doctrine and jurisdiction. This manuscript is further described, most of the short unknown texts and notes transcribed, and the characteristics and composition of the manuscript discussed, in a short paper by Jon Frey in collaboration with Maria Mavroudi and Luminita Florea, available in the manuscript file at the Robbins Collection."], "510 4": ["Phillipps, T. Cat. ms.,|c7223.", "Migne, J.-P. (Jacques-Paul), Patrologiae cursus completus. Series graeca|c150.45-168."], "260": ["[Constantinople?,|cbetween 1325 and 1799]"], "099": ["Robbins MS 67"], "100 1": ["Harmenopoulos, K\u014dnstantinos,|dd. 1380?"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["The manuscript was once in the collection of Sir Thomas Phillipps (his no. 7223) as well as in that of Frederick North, Earl of Guilford."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Script: Written in 7 or 9 different hands. According to Jon Frey there are 9 hands; Jesse Torgerson counts 7, identifying Texts 6 and 7 and the entirety of the front and back matter (with the exception of the text at the top of f. ivr) as the 18th-century hand of Nikolaos Karatzas, whose signature appears on the notepaper-sized insert, f. vv. Texts 1-5 are late medieval hands of the 14th century and later; Texts 6-8 are copies and transcriptions in 18th century hands.", "Binding: Mottled paper over pasteboard.", "Origin: Based on a note bound into the manuscript in the late 18th century, this codex was compiled by Nikolaos Karatzas, a known Greek bibliophile, intellectual, and political figure, and sent to an unidentified Theodora. The logic of compilation centers on the intellectual activity of 14th century Thessalonike. Nikolaos Karatzas, who compiled the ms., cites (f. ivr) \"the Greek library of Fabricius, vol. 10 [or 1?], book 5, chapter 42, page 276\" as saying that the 14th-century portion was prepared by K\u014dnstantinos Harmenopoulos during the reign of Anna Palaiologina and her son John Palaiologos \"in the year from the creation of the world 6853 [AD 1345]...\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 67."], "300": ["|3Original:|a32 leaves :|bpaper ;|c285 x 210 (200 x 125) mm bound to 295 x 215 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-55) and positive (Robbins MS 67)"], "505 8": ["Fol. 24v-25r: Harmenopoulos, De Fide Orthodoxa (On the Orthodox Faith).", "Fol. 25r-27r: Harmenopoulos, De Opinionibus haereticorum (On the Opinions of the Heretics).", "Fol. 27rv: Unidentified decree of Theodosius and Valentinian.", "Fol. 27v: Two excerpts in two different hands regarding ecclesiastical appointments.", "Fol. 28rv: Excerpt from Matthew Blastares's Syntagma canonum (Treatise of Canons).", "Fol. 29r-30r: Chrysobull of Andronikos II Palaiologus.", "Fol. 31r: Summary of the Donation of Constantine.", "Fol. 31v-32v: Refutation of the Donation of Constantine from the History (Vienna, 178304) of Meletius of Athens (Meletius of Janina)?"], "700 0": ["Theodosius|bI,|cEmperor of Rome,|d347-395.", "Valentinian|bII,|cEmperor of Rome,|d371-392.", "Andronicus|bII Palaeologus,|cEmperor of the East,|d1260- 1332."], "008": ["110512q13251799tu 000 0 grc d"], "583": ["|zCataloged from existing description and in hand by Jon Frey, Jesse W. Torgerson and Alexandre Roberts, March, 2011."], "852": ["BOL|bRBCAG|xCIN=JKN"], "546": ["Greek."], "003": ["OCoLC"], "700 1": ["Blastares, Matthew,|dactive 14th century", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "005": ["20110512054011.0"], "505 0": ["Fol. 1r-24r: K\u014dnstantinos Harmenopoulos, Epitome canonum (Summary of Canon Law)."], "035": ["(OCoLC)722953581"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS10": {"001": ["ocn318921869"], "260": ["Scotland,|cbetween 1650 and 1666."], "040": ["BOL|eamremm|cBOL"], "852": ["CUL|bRBCAG|xCIN=JKN"], "650 0": ["Law|zScotland."], "008": ["090421q16751699stk 000 0 eng d"], "099": ["Robbins MS 10"], "100 1": ["Stair, James Dalrymple,|cViscount of,|d1619-1695."], "546": ["In English with Latin legal terms."], "520": ["The principal text in this manuscript is The Institutions of the Law of Scotland by Sir James Dalrymple, Viscount of Stair. Before the Institutions is 44-page work titled The Form of Process Used Befor the Lords of Sessione, followed by 4 blank pages. The text of the Institutions is incomplete as the manuscript text ends in the middle of the 28th title Behaving as an Heir (the text ends somewhere in the 8th section out of a total of 18). There are other differences from the printed version of the text, most minor, although in the manuscript titles 18 and 19 are switched around. Dating of the manuscript is based on the following: James Dalrymple would not have started working on it before 1650, and the additions do not quote any Scottish cases after 1666 (many thanks to Gero Dolezalek for providing this information)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "003": ["OCoLC"], "561": ["From the library of the Honourable Hew Dalrymple (his bookplate on inside cover bearing his coat of arms). There are several individuals named Hew in the Dalrymple family, although the bookplate is not that of Sir Hew Dalrymple of North Berwick, third son of the author, as his coat of arms includes a lion and a bird and has a different layout. Others are the author's grandson, Hew Dalrymple, Lord Drummore (d. 1755) and Sir Hew Dalrymple, grandson of the first Viscount Stair and the third son of the Hon. Sir Hew Dalrymple (d. 1830)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Binding: Dark leather binding with stamped geometrical pattern on front and back boards. In each corner of the center rectangle is a floral stamp; this same stamp is also in the center, surrounded by the letters I.C. (for iurisconsultus?). Front board detached.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 10.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), KE3320 .S782 ILS 1680.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), 293gf .S7 S782 1680."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, April 2009."], "005": ["20090421112445.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)318921869"], "245 14": ["The institutions of the law of Scotland"], "300": ["|3Original:|a472 pages :|bpaper ;|c295 x 180 (255 x 125) mm bound to 230 x 185 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-91) and positive (Robbins MS 10)"]}, "RobbinsMS15": {"001": ["ocn244584588"], "110 1": ["Catholic Church.|bDiocese of Salamanca (Spain)"], "040": ["BOL|eamremm|cBOL"], "520": ["The book is comprised of manuscript and printed documents (items 16, 18, 19, and 20) pertaining to the process in the cause of beatification and canonization of Teresa of Avila. Item 1 is an index of documents debated during the proceedings in the presence of don Luis Fernandez de Cordoba, Bishop of Salamanca, and Juan Garcia Rodriguez Beltran de la Paz, apostolic notary of Salamanca. It is written in the latter's hand, like several of the documents included in this collection. Article 2 is a motion by Fray Luis de la Madre di Dios of the Discalced Carmelite order in behalf of Fra Josep de Jesus Maria, general of the order, requesting original documents attesting to the fame, sanctity, and miracles performed by St. Theresa. Article 3 is a notarized power of attorney granted by Fray Josep de Jesus Maria, General of the Order; authenticated (notarial sign). Article 4 is a copy of summary of witnesses and testimony at Salamanca authenticated by Juan Garcia Rodriguez Beltran de la Paz, Apostolic Notary (notarial sign). Article 5 is a transcript of documents issued by the Sacred Congregation of Rites initiating the process of canonization. The document includes the names of Cardinals Pinelli, Gallus, Bellarmino, Serafini, Pamfili, Odoardi, and Farnese, and is authenticated by Joannes Paulus Mucantius, Master of Sacred Ceremonies, Apostolic Notary, and Secretary of the Sacred Congregation of Rites (notarial sign missing). Article 15 is an anonymous account of a vision of St. Theresa. Article 16, printed, is the authorization given by the City of Alva de Tormes to celebrate a mass on 5 October in memory of St. Theresa. Article 17 is a copy of the Brief of Pope Paul V, given on 3 August 1617, autheticated by Felipe Salgado, Apostolic Notary (notarial sign). Article 18, printed, is a Brief of Pope Urban VIII, given on 21 July 1527, authenticated by Juan del Cerro, Apostolic Notary (notarial sign and seal). Article 19, printed, is a Brief of Pope Paul V, given on 27 September 1616, authenticated by Johannes Prieto, Apostolic Notary (notarial sign). Article 20, printed, is a duplicate of article 19, authenticated by Johannes Prieto, Apostolic Notary (notarial sign)."], "245 10": ["[Documents concerning the canonization of Saint Teresa of Avila]"], "099": ["Robbins MS 15"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. documents.", "Title from title page inserted by the 20th century French scholar who organized these documents into this form for binding.", "Collation: Irregular since it was compiled by a 20th century French scholar. Compiler or binder bound in modern sheets between sections on which is written, in French in blue pen, a description of the contents that follow. Foliation also provided by this compiler, however fol. 15 is counted twice, so foliation thereafter is off by 1.", "Binding: 20th century French hardcover binding of dark leather over boards. Title on spine reads \"Santa Teresa de Avila/Proc\u00e8s de canonisation.\" Coverd in an additional wrapper of stiff maroon cloth over boards with a leather spine. Kept in maroon cardboard box; title on box reads \"Santa Teresa de Avila.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 15."], "600 00": ["Teresa,|cof Avila, Saint,|d1515-1582."], "300": ["|3Original:|a53 leaves :|bpaper ;|c305 x 210 mm bound to 316 x 225 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-23) and positive (Robbins MS 15)"], "610 20": ["Catholic Church.|bCongregatio Sacrorum Rituum."], "505 8": ["2. Fol. 5r-6r: Letter from Luis de la Madre di Dios requesting information and witnesses regarding Teresa of Avila; letter of approval from Juan Prieto, apostolic notary.", "3. Fol. 7rv: Autograph letter of Fray Joseph de Jesus Maria, General of the Order of Discalced Carmelites.", "4. Fol. 10r-15v: Autograph summary of witness and testimony at Salamanca by the apostolic notary.", "5. Fol. 16r-18r: Copy of documents from 1604-1608 of the Sacred Congregation for Rites on the subject of the canonization of Teresa of Avila.", "6. Fol. 21r-24v: List of those questioned in the canonization process by don Luis Fernandez of C\u00f3rdoba, bishop of Salamanca, with a model for the questioning process.", "7. Fol. 26r-27r: List of those questioned in the presence of the bishop of Salamanca and Juan Garcia Rodriguez Beltram de Paz, apostolic notary; letter of approbation of Fray Luis de la Madre de Dios.", "8. Fol. 29r-33v: Instruction for the execution of the Compulsory of the Cardinals of the Sacred Congregation of Rites regarding the canonization of Teresa of Avila.", "9. Fol. 35rv: Summary of the questioning done by the bishop of Salamanca, recorded by the apostolic notary.", "10. Fol. 38r-39v: Summary of inquiry by Don Manrico, bishop of Salamanca in 1592, for the canonization of Teresa of Avila.", "11. Fol. 41r: Anonymous account of the vision of Teresa of Avila.", "12. Fol. 44r-45v: Printed authorization to celebrate yearly mass on October 5th.", "13. Fol. 46r-47v: Copy of a brief of Paul V from August 3rd, 1617 with the notarial sign of Felipe Salgado, apostolic notary.", "14. Fol. 48r-49v: Printed brief of Urban VIII from 1627 \"Domini Nostri Iesu Chrisiti, qui servos et ancillas suas aeternae gloriae praemio donat...\" with the notarial signature of Juan del Cerro.", "15. Fol. 50r-51v: Printed brief of Paul V from 1625 \"Domini nostri Iesu Christi, qui bonos et fideles servos et ancillas...\" with the notarial signature of Juan Prieto."], "650 00": ["Carmelites."], "260": ["Spain and Italy,|c[between 1590 and 1630]"], "008": ["080828q15901630sp 000 0 spa d"], "583": ["|zCataloged from existing description by Luminita Florea, and in hand by Jennifer K. Nelson, August 2008."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080828055447.0"], "505 0": ["1. Fol. 2rv: \"Pro\u00e7eso conpulsorial. Abecedario y rela\u00e7ion verdadera de los autos e ynforma\u00e7iones tocantes a la canoni\u00e7acion de la Santa Madre Teresa de Jesus...en la ciudad de Salamanca...por comisiones de la Santa Sede Apostolica.\""], "035": ["(OCoLC)244584588"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=109;fullview=yes"], "LEADER": ["00000ntc 2200000Ia 4500"]}, "RobbinsMS176": {"001": ["06-B4406"], "260": ["Italy,|c[between 1705 and 1725]"], "505 0": ["Fol. 1r: Index ; fol. 2r-22r: \"[text] Abigeatus. Abigeatus proprie committitur quando furtum animalum fuit patratum in mandris. . .non vero de iudice laico ad Ecclessiasticum, Sabell. verb. persona n.x.\" ; fol. 25r: Index (incomplete)."], "520": ["A dictionary of legal terms from \"Abigeatus\" to \"Variatio Fori\" with illustrative case citations from 1613-1704 (most predominantly cited appear to be cases from 1696- 97). Each definition contains a reference to a passage where the term is discussed, a great many of which seem to be taken from the work of Odoricus Raynaldus. The beginning of the book contains an index, but there is also an unfinished index at the end (fol. 25r). Contemporary foliation in ink (often crossed out) that goes from 252 to 272 is evidence that this was once part of a larger work."], "650 0": ["Canon law|vDictionaries."], "300": ["25 leaves :|bpaper ;|c300 x 215 ( 283 x 100) mm bound to 305 x 220 mm."], "510 4": ["Phillipps, T. Cat. ms.|c7693."], "852 8": ["CUL|bRBCAG|hRobbins MS 176|xCIN=JKN"], "008": ["060911q17001725it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Summar[ium] legum"], "245 00": ["[Dictionary of legal terms]"], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "561": ["Written in pencil on front flyleaf is \"J. Lipton 5/80.\" Manuscript was once in the collection of Sir Thomas Phillipps (his no. 7693) and of Frederick North, Earl of Guilford (his bookplate on front on front pastedown depicting a shield supported by two dragons rampant with spread wings, gorged and chained, with an earl's crown; within the shield is a lion surrounded by three fleurs-de- lis; the motto reads \"La vertu est la seule noblesse\"). Affixed below title on spine is an oval green sticker 7 x 19 mm in size. At base of spine is a small label with the Phillipps MS number (7693), as well as the number \"615\" written below it in ink."], "500": ["Ms. codex.", "Title supplied by cataloger; added title from spine and note tipped in between fols. 1 and 2.", "Collation: Paper (watermark depicts a bird atop a trimontium with a letter \"F\" above), fol. i (modern paper) + 25 + i (modern paper); collation indiscernible due to tightness of binding. Catchwords at the end of each verso.", "Layout: Page layed out in 2 columns: 51 lines of writing down the left-hand column; right-hand column left blank for additions and notes.", "Script: Written in a very neat humanistic-style script by one hand.", "Binding: Half-vellum and grey-green marbled paper over pasteboard. Title in gilt letters on red leather background reads \"Summar: Legum. / M.S.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 176."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "090 8": ["Robbins MS 176"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS136": {"001": ["06-B3827"], "260": ["[Spain,|bca. 1475]"], "505 8": ["Fol. 5r-6r: [Tractatus sacrilegii by Alvaro Pelayo] Queritur quid sit sacrilegium, quibus modiis sacrilegium committitur...que incipit secundum cursum causarum. [rubr.] Explicit tractatus sacrilegii per dominum fratrem Alvarum editus. Deo gratias amen.\"", "Fol. 6v-13r: \"[Tractatus de absolutione et excommunicatione, anonymous] Sciendum quod generaliter ab omni excommunicatione sive minoris sive maioris lata a iure potest absolvi...a qua sine dubio separatus est, ut exemplo de [...] si celebrat.\"", "Fol. 14r-15r: \"[rubr.] Repetitio facta in studio Salamantice super auditionem Misse et verbi Dei que constitit in quinque questionibus. [text] Prima questio. Utrum quiliber Christianus teneatur audire diebus dominicis et festivis sub pena...ut summa in quarta questione. Datum est, Deo gratias, amen.\"", "Fol. 16r-116v: \"[Tractatus de usuris by Bernardino da Siena, with an index of contents] [rubr.] Incipit tabula super tractatum de usuris sancti Bernardini de Senis ordinis Minorum. [text] Sermo de origine diversorum...intellego factum sive omissum...ad hec. [rubr.] Incipit tractatus de contractibus et usuris secundum sanctum Bernardinus de Senis ordinis Minorum. Et primo ponitur ordo dicendorum in materia dictorum contractuum et usurarum. Sabbato post quartam dominicam in Quadragesima: de origine dominiorum et rerum translatione sermo 32. [text] Vade et amplius noli peccare (Ioh 8, 11). In Evangelio hodierno a caritate...et triumphator mortis regnat in secula seculorum, amen. [rubr.] Explicit tractatus de contractibus et usuris secundum sanctum Bernardinum de Senis de ordine Minorum. Iste tractatus de contractibus et usuris fuit scriptus in conventu Sancti Francisci Ayllonensis per me fratrem Antonium de Caveis Rubeis anno Domini millesimo quadrigentesimo septuagesimo quinto tunc ibidem commorantem.\"", "Fol. 116v-117v: \"[Comments on law both in Latin and Spanish] Casus est talis. Huius tractatus unius paris...archidiacono Segobiense. Los maioradgos omeron (?) comienzo dela ley...que al ombre crio et conel.\"", "Fol. 118r-126r: \"[Brevis interrogation confessionum by Antonino da Firenze] [rubr.] Incipit quedam brevis interrogatio confessionum reverendi magistri Antonii ordinis Predicatorum. [text] Interrogationes confessionum fiende sunt de decem preceptis, septem peccatis mortalibus, quinque sensibus corporis...et vanitates faciant et vendant.\"", "Fol. 126r-136v: \"[De materia restitutionis by Antonino da Firenze] [rubr.] Sequitur de materia restitutionis composita per reverendo magistro fratrem Antonium de Florentia ordinis Predicatorum. [text] Circa materiam restitutionis seu satisfationis notandum quod omnis restitutio seu satisfactio...excusentur et faciendi sit eius constantiam, dictum est supra. [rubr.] Explicit tractatus de restitutione reverendi patris fratris Antonii de Florentia.\"", "Fol. 136v-145r: \"[Fragment of a work by Antonino da Firenze] [rubr.] Incipit alius notabilis eiusdem reverendi magistri. [text] Quomodo aliqui sunt fauctores raptorum ita quod teneantur ad restitutionem...et premissos sive eciam dispensatos [...] communicatos. [rubr.] Explicit tabula in vulgari ut invenit frater Barus (?).\"", "Fol. 145r-148v: \"[Determinationes abbreviatae by Antonino da Firenze] [rubr.] Incipiunt determinationes abreviate a fratre Antonio de Florentia ordinis Predicatorum qui postmodum fuit archiepiscopus Florentine civitatis. Si est prolongandus tempus communionis. [text] Non licet tempus communionis anticipare sed nec eciam prolongare...ad missam dies nisi de bono et equo: hec Durandus.\"", "Fol. 150rv: \"[Fragment of a work by Thomas Aquinas] [rubr.] Thomas in quodam tractatus de angulis. [text] Quantum vero ad hoc, quod dicit animas hominum mortuorum fieri demones est erronea...quod in purgatorio erit expletio residui pene: hec Ricardus.\"", "Fol. 151rv: \"[Fragment of a law concerning fruits] De fructibus precipiendorum ubi dominus et coloni sunt partiarii...in relativa mora de regulis iuris in libro quinto.\"", "Fol. 152r-168v: \"[Casus toto corpore iuris, anonymous] [rubr.] Sequuntur casus toto corpore iuris clausi quibus ipso iure incurrit maiorem exentionem in quibus hoc ordine preceditur. Primo inferunt casus...sequuntur casus exentionis in iure antiquo contenti sedi appostolice reservati. [text] Primus est incendiarius Ecclesie postquam per ecclesiasticum iudicem est denuntiatus...et reputationem in tertis casibus facit annuatim cuius copia supra (?) est inserta. Deo gratias.\"", "Fol. 169rv: \"[rubr.] Thomas in tertia parte Summe...articulo secundo. [text] Utrum participans ad excommunicationem sit excommunicatus. Dicendum quod...nisi prius absolutus ab excommunicatione: hec Thomas.\"", "Fol. 171r-176v: \"[Quaestiones, by Juan Alfonso de Benavente] [rubr] Quaestiones sequentes fuerunt determinate per reverendum doctorem Iohannem Alfonsi de Benavente regentem cathedram Decretorum in studio Salamantino mense Marci anno Domini 1454.[text] Quidam promisit cuidam iuveni dare filiam suam...heredes compelluntur implere votum defuncti, secundum in aliis votis non compelluntur.\"", "Fol. 176v, 180r-184v: \"[Repetitiones, by Pietro d'Ancarano] [rubr.] Hoc quod sequitur ponit famosissimus doctor Petrus de Ancharano. In quodam repeticione sive peccatum libro quinto De regulis iuris. [text] Set occurrit questio que sepe contingit in provincia patrimonii sancti Petri...hec questiones vide in tractatu de interdicto per d[omino?] Io[hannem] Calde[?].\"", "Fol.177r-178v: \"[Notes on division of fruits] Primum quantum clerici teneantur ad restitucionem illorum fructum quos voluptuose...in diversis locis quos nassare (?) esse lungis.\"", "Fol. 184v: \"[rubr.] Quanum potest confessor dimittere. [text] Quantum autem possit sacerdos dimittere non est multum curandum alias quam...nota quod sacerdos debet iniungere...\"", "Fol. 185r-214v: \"[A commentary on Peter Lombard ascribed to Thomas Aquinas] [rubr.] Incipit Summa sancti Thomae quarti libri secundum Magister Summarum. [text] Samaritanus interpretatur custos sanctitatis...unde ignis ille erit turbidus et furiosus et fetulentus. [rubr.] Explicit Summa quarti libri sancti Thomae secundum Magistrum Summarum. Deo gratias. Deo gratias amen in seculum et in seculum seculi seculorum et ultra.\"", "Fol. 215r-223r: \"[rubr.] Nota de bello. [text] Alexander in tertio De lege bellorum...circa quam partem queruntur tria: primo utrum mali...in consilio et in precepto; et hec predicta sufficiatur de bellis.\"", "Fol. 223v-225r: \"[Note on inheritance due to daughters in monasteries]\" Utrum locantes filias suas in monasteriis constituta qualicumque docte facientes illas...consulti de regula\".", "Fol. 227v;230v: \"[rubr.] Iste sunt gratie et indulgentie concesse diversis temporibus per diversos summos pontifices familie cismontane ordinis Minorum. [text] Eugenius quartus ob multa scandala evitanda et pacem...dicuntur satisfacere. Sixtus papa quarto concessit quos prelati nostri possint commutare legata...Ego frater Franciscus Placentinus ordinis Minorum commissarius...Ego frater Natalis de Promeret ordinis Minorum de Observantia...\""], "520": ["This manuscript contains several different works by different authors, but it is conceived to be an 'unicum', since it was probably copied by two or three different hands, that appear to be very similar: the scribes were all Spanish and contemporary with each other. The main part of the manuscript was copied in a Franciscan convent, and many of the texts contained in it are related to the 'Ordo Minorum' in one way or another. Among the authors, we have here represented most of the best-known Law scholars of the Middle Ages. Some occasional marginal additions and notes are visible, mostly by a contemporary hand."], "300": ["230 leaves :|bpaper and parchment ;|c220 x 150 (155 x 105) mm bound to 225 x 160 mm."], "546": ["Latin."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=80;fullview=yes"], "700 0": ["Bernardino,|cda Siena, Saint,|d1380-1444.", "Bonaguida,|cd'Arezzo,|dfl. 1251-1258.", "Bindus Guerri,|cSenensis,|d-1390.", "Antoninus,|cSaint, Archbishop of Florence,|d1389-1459.", "Pietro,|cd'Ancarano,|d1330-1416.", "Thomas,|cAquinas, Saint,|d1225?-1274."], "246 2": ["|iSecundo folio:|ain glossa qua incipit"], "099": ["Robbins MS 136"], "008": ["060811s1475 sp ||||||||||||00|||lat|c"], "245 00": ["[Miscellanea iuridica]"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "561": ["On the front edge, title written in capital letters by a late 16th century hand: \"De restitute[...]\", possibly used in some convent library during the Middle Ages."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper and parchment, fol. 230; the quires appear to be regular, each one is composed of 12 folios. Fol. 16r-116v: for each quire, the opening folio and the folio in the middle are parchment, while the rest of the quire is paper. All the other quires are entirely paper. Fol. 16r-116v, catchwords in the middle of the bottom margin, on verso, framed in red; running titles in the upper margin.", "Layout: Fol. 1r-15r, 38 long lines. Fol. 16r-117v, written in two columns of 44 lines. Fol. 118r-230v, 39 long lines. Ruled in ink and dry point. No contemporary foliation.", "Script: Written in a neat cursiva libraria script, by at least two different hands, below top line.", "Decoration: Fol. 16r-116v: red initials on 3 or 2 lines, some of them penworked in red. Red paragraph marks throughout the text. Some parts of the text underlined in red. Fol. 117r-171r, red paragraph marks and red rubrics throughout the text.", "Binding: Contemporary binding, brown blind-tooled leather over wooden boards. Spine with five comparts and raised bands. Two catches and clasps on the cover (lacking).", "Origin: Fol. 16r-116v were copied in 1475 in Ayllon, Segovia, Spain, by a friar named Antonius de Caveis Rubeis who was in the convent of St. Francis of Assisi (his name is not listed in the \"Colophons\" by the Benedictine of Bouveret). Many contemporary notes in Latin and Spanish on inside back cover, some concerning linguistic and grammar (\"Si la sillaba es luenga e lazento stara...si la silaba es breve...\"). On inside front cover, notes in Spanish, possibly about plants and vegetables (\"Sangre de murziegalo...de cipres...valostias...\").", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 136."], "700 1": ["Pelagius, Alvarus,|d1280?-1353.", "Benavente, Juan Alfonso,|dca. 1454."], "505 0": ["Fol. 1r-4v: \"[Summula de dispensationibus by Bonaguida d'Arezzo] Attendens ego Bona Guida de Aretio licet [...] [cano]nici iuris professor quod te casibus in quibus...ortulus iste brevis dulcia poma gerit. [rubr.] Explicit summula de dispensationibus domini Bona Guida de Aretio. Deo gratias amen.\""], "852 8": ["CUL|bRBCAG|hRobbins MS 136|xCIN=JKN"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS33": {"001": ["06-B4122"], "245 10": ["[Summa de poenitentia]"], "520": ["The manuscript represents the work of several scribes and was copied in England. There are also notes and additions in the margins, some of these by a later hand (possibly mid 14th century). Its tiny format, and the fact that it looks heavily used, suggests that it could have been written for the daily use of priests dealing with the practice of hearing confession. Although the modern foliation is wrong, the manuscript could not be refoliated, due to the extreme fragility and ubiquitous mold spots. This description follows the (incorrect) modern foliation."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[England,|cbetween 1230 and 1280]"], "246 2": ["|iSecundo folio:|apro redimenda vexatione"], "581": ["Augustinus Hipponensis, Sancti Augustini Confessionum libri XIII, ed. Lucas Verheijen, O. S. A., Corpus Christianorum Series Latina [henceforth CCSL] 27 (Turnholti: Typographi Brepols Editores Pontificii, 1981)", "Augustinus Hipponens, Sancti Aurelii Augustini De Diversis quaestionibus octoginta tribus, ed. Almut Mutzenbecher, CCSL 44 (1975):1-249.", "Sancti Aurelii Augustini Regula, ed. Luc Verheijen (Paris: Etudes Augustiniennes, 1976); id., Sancti Aurelii Augustini Sermones de Vetere Testamento (I-L), ed. Cyrill Lambot, O. S. B., CCSL 41/1 (1961-).", "Sancti Prosperi Aquitani Liber sententiarum, ed. M. Gastaldo, CCSL 68A (1972): 213-65.", "Raymundus de Penaforte, Summa de paenitentia S. Raimundus de Pennaforte, ed. Xaverio and Aloisio Diez, Universa bibliotheca iuris 1/C (Rome: Commentarium pro religiosis, 1976)"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Between 1713 and 1773 the book belonged to a Welsh man named John Roberts (fol. 10r: \"John Roberts is Booke;\" fol. 13r: \"John Roberts ywgwiv berehenog y llufi (?) hun 1713 (?). It seem reasonable that this man is the same John Roberts born in 1731 and died in 1806, so the date 1713 is likely a mistake, and it is also barely legible;\" fol. 81r: \"John Roberts B, John Ro,\" in an upside-down script; fol. 124r: \"John Roberts tou bibilou (in Greek);\" fol. 124v: \"John Roberts ejus manu anno Domini;\" fol. 130r : \"John Roberts\"). Other owners were: William Eastfield Laughton, Esq., residing at Eastfield House, Tickhill (inside front cover; his signature on fol. 125v; f. 137r) and Mrs Sarah Laughton, around 1780 (inside front cover; \"Sarah\" fol. 98v; fol. 137r). In 1850 the manuscript became the property of Frederic Augustus Laughton, grandson of William, residing at Wakefield (front inside cover, fol. 83r and 114r; fol. 122v and 137v: \"This book came into the possession of Frederic Augustus Laughton Grand Son of the late William Eastfield Laugton Eastfield house Tickhill Yorks. Feb. 7th 1850\"). Another possible owner was one Maurice Jones (fol. 88v: \"Maurice Jones his hand\"). Other ownership marks and inscriptions, mostly of the eighteenth and nineteenth centuries, are \"Dartmouth the Kingdom of England\" (upside down), fol. 65v; \"Lawier quod amor vincit omnia,\" fol. 90v (vertical script imitating early Gothic bookhand, but clearly of a much later date, possibly Frederic Laughton's hand); \"This indenture III made this 3d day,\" fol. 100r; \"Canterbury,\" fol. 122r; \"This indenture made on the third day of march one thousand seven hundred and fifty seven and in the Thirty Seven years of the Reign of our Sovering [sic] lord King George fra[..] and J. W.,\" fol. 150v. On fol. 151r a former owner composed a 4-line poem: \"A fu darfu ei derfyn / A fydo adderfyddo ddyn / Rhaid i beran anrhydedu / Myn fy ngrhed fyned i bed.\""], "500": ["Ms. codex.", "Title supplied by cataloger (the title possibly used to appear in the opening rubric, but it is too faded to be legible)", "Collation: Parchment, fol. iii (modern paper) + 152 + iii (modern paper); 1\u2078 2\u00b2 3\u2078 4\u00b9\u2070 5-6\u2074 7\u00b2\u2070 8\u00b9\u00b2\u207b\u00b9 9\u00b9\u2074 10\u00b9\u00b2 11\u00b9\u2074 12\u00b9\u00b2 13\u00b9\u2074\u207b\u2074 14\u00b9\u00b2\u207b\u00b2 15\u00b9\u00b2. No contemporary foliation is provided. Modern (20th century) foliation in pencil, in the upper margin; this foliation is wrong because it counts both missing pages and the cut folios. Folios that had been cut away: 64, 125, 133-135, 147-148. Catchwords in the bottom margin in the right corner, on verso, by the hand of the scribe. No quire numbers or signature marks.", "Layout: Written mostly in two columns, 41-42 lines for each column. Fol. 146r-150r, written in up to 30 long lines. Running titles on the upper margins, both on recto and verso. Ruled in lead and dry point.", "Script: Written in a textualis libraria script, below top line, by several different scribes contemporary to each other. The text of the \"Summa poenitentiae\" was copied by three hands: fol. 3r-12v, fol. 13r-34r, and fol. 34v-122r. Fourth scribe, fol. 126r-131r; many different hands on fol. 131v-150v; one scribe copied fol. 151r-162v.", "Decoration: Alternating 4-line pen flourishing initials throughout the text. Red rubrics, red paragraph signs. Alternating red and blue running titles in the upper margin.", "Binding: Late 18th century binding, brown leather over pasteboard, blind tooled. Modern flyleaves. Kept in modern, brown, cloth-covered box", "Origin: Written in England, possibly between 1230 and 1280.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 33."], "300": ["|3Original: |a152 leaves :|bparchment ;|c132 x 95 (95 x 65) mm bound to 140 x 100 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-6) and positive (Robbins MS 33)"], "505 8": ["Fol. 126r-129r: [Augustinus Hipponensis, Confessiones. Excerpta: Liber IV cap. 10, 11, 12; Liber XII cap. 25, 31; Liber XIII cap. 9, 17, 31] \"//si unum verbum non discedat consumit partes suas ut succedat...quibus tamen non tu places in ea unde frui magis ipsa quam te volunt.\"", "Fol. 129r-132v: \"[Augustinus Hipponensis, De diversis quaestionibus octoginta tribus. Excerpta: Quaestiones 2, 47, 48, 51, 71] Omne quod fit ei a qua fit par esse non potest...quemadmodum se inclinat qui manum iacenti porrigit.\"", "Fol. 136r-137v: \"[Augustinus Hipponensis, De doctrina christiana. Excerpta. Liber I cap. 36] Omnis autem fidei violator iniquus est...sub decorato tecto non iaces sed habes celum ineffabilibus stellarum pulchritudinibus perfulgentem.\"", "Fol. 137v-138r: \"[Augustinus Hipponensis, De agone christiano. Excerpta: Cap. 1, 7, 33] Quicumque mali sunt sic ordinati...ubi ullam de corpore molestiam senciemus.\"", "Fol. 138r-145v: [Augustinus Hipponensis, Sermones 109, 54, 55, 61, 62, 100, 67, 94A, 69, 72, 76, 83, 82, 84, 88, 16A, 93, 105. Excerpta]", "Fol. 146r: \"[Sermon] Egressus autem Iesus secessit in partes Tyri (Mt 15, 21). Quattuor sunt hic consideranda: primo de egressu...tertius caritatis, quartus felicitatis.\"", "Fol. 146v: \"[Sermon, possibly by Latinus Malabranca according to IN PRINCIPIO database] Fructus lucis in omni bonitate (Eph 5, 10). Duplex lux est...lumen suum.\"", "Fol. 149r: \"[Schemata sermonum] Tres sunt qui testimonium dant in celo...circa humillimos (?).\"", "Fol. 151r-160r: \"[Augustinus Hipponensis, De quantitate animae, excerpta] [text] Enumera breviter que audire de anima velis. Quero unde sit anima...quanquam sapientissimus et perfectissimus vel prorsus quilibet racionis concors atque beatissima anima. [rubr.] Explicit liber de quantitate anime.\"", "Fol. 160v-162v: \"[Sententiae variae: Prosper Aquitanus, Liber sententiarum, Pseudo-Isidorus et alii] Hii vident Domini mirabilia quibus prosunt...Hii vident Domini mirabilia quibus prosunt...ut unde non proficitur non unde (?)//.\""], "100 0": ["Raymond,|cof Pe\u00f1afort, Saint,|d1175?-1275."], "852 8": ["CUL|bRBCAG|hRobbins MS 33|xCIN=JKN"], "700 0": ["Augustine,|cSaint, Bishop of Hippo.", "Prosper,|cof Aquitaine, Saint,|dca. 390-ca. 463"], "008": ["060825q12301280enk||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "546": ["Latin."], "700 1": ["Laughton, F. A.|q(Frederick Augustus).|4asn|4fmo|5CUL.", "Laughton, William Eastfield.|4asn|4fmo|5CUL.", "Laughton, Sarah.|4asn|4fmo|5CUL.", "Jones, Maurice.|4asn|4fmo|5CUL.", "Roberts, John,|d1731-1806.|4asn|4fmo|5CUL."], "505 0": ["1. Fol. 3r-122r: \"[text] Quoniam ut ait Ieronimus secunda post naufragium tabula est culpam simpliciter confiteri ne impericia ministrantis predictam tabulam submergi contingat aliquando naufragantes...mereamur audire in die iudicii Domini dulcem et ineffabilis iocunditatis vocem illam: Venite benedicti percipite regnum. Amen.\" Fol. 122v -124v: [Index rerum] [rubr.] Incipit liber primus. [text] De summa Trinitate et fide...de regulis uiris.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=119;fullview=yes"], "090 8": ["Robbins MS 33"]}, "RobbinsMS181": {"001": ["ocn177278372"], "245 10": ["De iurisdictione et privilegiis illustrorum clericorum rev[erendae] camerae apostolicae."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["A text on the offices of the Apostolic Camera, one of which is \"prefect of archives.\" The list of twelve men (two of whom were members of the Camera under Pius VI) on f. 3r appear to be recipients of the book . At the end of the work are a letter of Pius VII dated to 1801 and a Chirograph of Innocent III."], "260": ["Rome,|cca. 1800."], "008": ["071026q17901800it 000 0 lat d"], "099": ["Robbins MS 181"], "505 0": ["Fol. 3r-4v: \"[text] Illustrissimis, atque amplissimis viris...Nicolaus Maria de Nicolais. Quoniam pluribus abhinc annis beneficentia sanctissimi Domini Nostri Pii VI ad munus substituti Reverendae Camerae Apostolicae admissus sum...quae vel ad universum eorum Collegium, vel ad cuiusque praesidii munus spectare possint\" ; fol. 5rv: \"Index capitulorum\" ; fol. 6r-192r: \"[text] Cap. I. De Rev. Camera Apostolica. Nihil magnificentius esse potest eo elogio, quo Pius IV [a] nuncupavit Camerae Apostolicae Tribunal reliquis totius Curiae dignius et excellentius...illudque custodiat nec quemcumque cuiuscumque gradus, et conditionis, nisi praemonito per eum Vicecamerario, seu Decano, indeque deliberate admittere, vel introducere audeat\" ; fol. 193r-194v: \"[text] Copia delle lettere Apostoliche in forma di breve spedite sopra alcuni privilegi concessi alli Illustrissimi [Monsignori?] Chierici della [Reverendissima?] Camera Apostolica\" ; fol. 195r-197v: \"[text] Chirografo d'Innocenzo Papa XIII sulle autorizazioni di Monsignor Prefetto degli archivi.\""], "100 1": ["Nicolais, Nicolaus Maria de."], "003": ["OCoLC"], "546": ["Latin and Italian."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, October 2007."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Once in the collection of Sir Thomas Phillipps (his no. 5335)"], "500": ["Ms. codex.", "Title from title page (fol. 2r)", "Collation: paper (watermark: a bird and mountains within a circle, not in Briquet ) fol. i + 198 + fol. i ; 1\u00b2 2\u2078 3\u00b9\u2070 (+ 1 bifolium stitched in) 4\u2078 (+ 1 bifoliom stitched in) 5\u00b9\u2076 6\u2078 7\u00b9\u2076 8\u2078 9\u00b9\u2076 10\u2078 11\u00b9\u2076 12\u2078 13\u00b9\u2076 14\u2078 15\u00b9\u2076\u207b\u00b2 (+ 1 sexternio and one quinio stitched in).", "Layout: Pages are divided into two columns by folding, and text is written in the right-hand column with the left- hand column left blank for notes. There is often a strong horizontal line across the page containing footnotes which are referred to in the text by means of bracketed letters of the alphabet, i.e. [f], [hh], etc.", "Script: Written in a cursive script by at least 5 hands: hand 1 title page and mainly fol. 3v-56v (hand 1 originally wrote fol. 3r but new page is glued over original); hand 2 mainly fol. 57r-172r; hand 3 writes on inserted pages and notes throughout, and then fol. 172v- 192r; hand 4 fol. 193r-194v; hand 5 fol. 195r-197v.", "Binding: Bound in paper printed with roses; leather spine with gilt decorations and leather corners. Title on spine: \"Nicolai/ De Iuris/Et Priv/ Ill. Cler/ R.C.A.\" Shelfmarks on spine: \"5335\" and \"CCXIV.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 181."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "005": ["20071101040825.0"], "LEADER": ["00000ctm 2200000Ia 4500"], "035": ["(OCoLC)177278372"], "300": ["198 leaves :|bpaper ;|c259 x 182; (238 x 160) mm bound to 270 x 190 mm."]}, "RobbinsMS102": {"001": ["06-B4154"], "245 10": ["[Collectio tripartita]"], "520": ["This manuscript is a very precious 12th century exemplar of a textual variant of the \"Collectio tripartita\" written by Ivo of Chartres. The greek letters at the bottom of the last page, identified in a Sotheby's description as \"presumably the signature of the original owner,\" are in fact an attempt to transcribe a Greek phrase found in the text a few lines above. There are many marginal corrections and notes in brown ink, in several hands, all contemporary with the copying of the main text, and massive erasures. The manuscript is incomplete."], "710 2": ["Stift Admont.|4asn|4fmo|5CUL.", "Lambach.|4asn|4fmo|5CUL."], "510 4": ["Brett, Martin, The Berkeley Tripartita, \"Bulletin of Medieval and Canon Law, 16 (1986), pp. 89-91."], "260": ["[Austria?,|cbetween 1100 and 1125]"], "246 2": ["|iSecundo folio: |ainueniaris mundialis negociis"], "581": ["Alvarez, Nancy, \"Sex and Power in a Textual Variant of the Collectio Tripartita: Reconstructing an Ideology of Reform Identity from a Canon Law Collection at the Benedictine Monastery of Admont, c. 1100-1125.\" Honors Thesis in Medieval Studies, Stanford University, 2001 (kept in manuscript file)."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["This manuscript was possibly produced at the Benedictine monastery at Admont, Austria, and kept there until at least the 14th century, since it is recorded in the Admont catalogue of that period. Then it was transported to the neighboring Benedictine reform monastery at Lambach."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. 162; 1-8\u2078 9\u00b9\u2070\u207b\u00b9 10\u2078 11\u00b9\u2070\u207b\u00b9 12- 19\u2078. No catchwords and no contemporary foliation is provided. Two sets of foliation: the earlier one (but not original) in ink, only identifies fol. 1 and 160; the more recent one, in pencil, identifies every 5 folios in Arabic numerals (fol. 1-15 are numbered in continuous sequence), but the foliation does not coincide with the earlier one and is not correct.", "Layout: Written in 30 long lines, above top line. Ruled in drypoint; prickings visible in the outer margins. Occasional marginal notes.", "Script: Written in a very tidy and professional Carolingian minuscule script.", "Decoration: Orange and red 2-line initials throughout the text. Red rubrics.", "Binding: Tawed leather cover over wooden boards. The boards are cut flush to the size of the folios, and deteriorated with major losses: upper spine corners of both boards and upper fore edge corners in the lower board are heavy damaged. Two straps to be fastened on the fore edge and one strap to be fastened on the lower board, now missing. Three double thongs with twisted cords. Primary kettle stiches; remains of the decorative tabbed end bands. Covering material loose on the spine. The spine leather is partially torn along both joints, allowing details of sewing end bands and spine folds to be seen. Outer leaves were pastedowns in this or in a previous binding: the outer margins have been trimmed. On the spine is still barely visible the title: \"Canones minores\" in a capital script, possibly 12th century style. The pastedowns are taken from a 15th century German liturgical manuscrpit. On the lower board, a 15th century German hand wrote a title, which, interestingly, is flipped as if a mirror image: \"Liber perri[...] et discr[...]ione d[...] c[...]\".", "Origin: Written possibly in Austria, Admont, at the beginning of the 12th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 102."], "LEADER": ["00000ctm 2200000 a 4500"], "300": ["162 leaves :|bparchment ;|c231 x 164 (175 x 125) mm bound to 228 x 170 mm."], "505 8": ["Fol. 160r-161r: [Appended texts] 1. fol. 158v: Deut. 17.12 -13; Deut. 17.14-17; Deut. 17.18-20; Deut. 18-19; I Samuel 8.4-18; I Samuel 12.12-19; 2. fol. 161r-v: First Council of Seville, Third Canon; 3. fol. 161v-162v: St. Jerome, Commentary on Amos."], "100 0": ["Ivo,|cSaint, Bishop of Chartres,|dca. 1040-1116."], "852 8": ["CUL|bRBCAG|hRobbins MS 102|xCIN=JKN"], "008": ["060828q11001125au ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi and Linda Ogden. August 2006."], "546": ["Latin."], "505 0": ["Fol. 1r-160r: \"[text] Quoniam quorundam Romanorum decretalia pontificum synodalibus tempus praestant...namque per somnia et manes quasi revelationes quorumlibet hominum ubicumque constituuntur altaria omnimodo reprobentur\"."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=63;fullview=yes"], "090 8": ["Robbins MS 102"]}, "RobbinsMS303": {"001": ["ocn609705276"], "245 10": ["[Collection of Papal letters]"], "040": ["BOL|eamremm|cBOL"], "520": ["This manuscript includes copies, or possibly drafts, of more than two hundred Papal letters and can thus be considered a Papal Register (a copy of outgoing documents kept by their originator), although it is not a formal one. The letters are addressed to recipients across Europe and vary widely in content and type: answers to petitions; letters addressing the foundation of parishes, chapels, churches, and monasteries; some addressing the suppression of one foundation and the establishment of a new one. The manuscript concludes with sixty-nine letters confirming the unions of parishes, monasteries, etc. (most are not dated). There is mostly some very general organization within the manuscript according to these different types of documents, and within some sections the contents are usually in a general chronological order. Most of the letters included in the volume date from the reigns of Popes Sixtus IV (1471-1484), Innocent VIII (1484-1492), Alexander VI (1492-1503), Pius III (1503), and Julius II (1503-1513); the final letter is from Leo X (1513-1521); documents from Alexander VI are probably most common. Earlier letters are also included sporadically. One of special interest on ff. 178v-179 is a letter of Pope John XXII from the sixteenth year of his papacy, or 1332, establishing a studium generalium at his birthplace in Cahors. A much fuller description of this manuscript is available in the manuscript file."], "300": ["|3Original:|a350 leaves :|bpaper ;|c290 x 215 (225 x 125) mm bound to 295 x 220 mm.", "|3Copy:|a1 microfilm reel :|bNOT FILMED YET"], "110 2": ["Catholic Church"], "260": ["Rome, Italy ,|c[between 1490-1519]"], "099": ["Robbins MS 303"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript once belonged to Harry A. Walton Jr. of Covington, Virginia (his manuscript A-1864)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Collation: 1\u00b2\u2070 2\u00b9\u2078 3-4\u00b2\u2074 5\u00b9\u2076 6\u00b2\u2076 7-8\u00b2\u2074 9\u00b9\u00b2 10\u00b9\u2074 11\u00b2\u2074 12\u00b2\u2070 13\u00b9\u00b2 14\u00b2\u2074 15\u00b3\u00b2 16\u2074 17\u00b2\u2078 18\u2074. Horizontal catchwords on quires one and two only; apparently unruled except for full-length vertical bounding lines in blind; each folio also has a crease in the middle as if it has been folded in half, and on some folios it appears to have been folded along the vertical bounding lines.", "Layout: Written in twenty-seven to forty-eight long lines.", "Script: Written by numerous scribes in a variety of scripts ranging from quick cursive scripts to scripts approaching a cursive humanistic minuscule.", "Decoration: Most documents begin with a simple decorative opening letter in the same ink as the text.", "Binding: Original sixteenth-century vellum binding over pasteboard; cover is flush with bookblock; spine with three raised bands; deckle fore-edge is frayed and darkened; broken head and tail bands.", "Origin: Most likely written in Rome during the period of ca. 1490-1519 as suggested by the date of the majority of the documents (the most recent document dates from 1519), and by the watermarks. Numerous scribes with frequent changes of hand copied it, but early scribes reappear later in the manuscript, and the structure of the collection is complex. It was almost certainly copied at the papal archives and consists of either copies of completed outgoing documents, drafts of documents, or possibly both. The amount of wear on the fore-edge of the paper sheets suggests that it might have been preserved as unbound paper quires for some period of time; this hypothesis would also help explain the lack of chronological order in the letters copied here.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 303."], "035": ["(OCoLC)609705276"], "505 8": ["Section 2: Fol. 50-53v: Pius III (1503) -- fol. 54-58: probably Julius II \"[incipit] Ad r[?] querendum pastoralis officii debet mei studio inpendentes...vndecimo kalendas iunii anno primo\" -- Fol. 58rv: Julius II (1503) \"[incipit] Iulius episcopus servus servorum dei. Dilectis filiis capitulo ecclesie halberstadensis salutem et apostolicam benedictionis. Deuotionis uestre sinceritas pro meretur ut votis...anno millesimo quingentisimo tertio. Pontificis nostri anno primo\" -- fol. 58v-59v: Innocent VIII (dated 1492) -- fol. 59v-60: Innocent VIII - - fol. 60v-66v: probably Pope John XXII (with a marginal note mentioning Clement V) \"[incipit] Iohannes. Ad ea ex quibus nullus augentur...\" (numerous marginal notations) - - fol. 66v-67v: \"[incipit] Nouerint universi presentes\" -- fol. 68-82: Innocent VIII (1485) -- fol. 82v-83v: \"[margin] Bulla priuilegiorum capelle Regine\" \"[incipit] Alexander VI, Carissimo in christo filio...\" -- fol. 84rv: \"[incipit] Pius III, ad perpetuam rei memoriam, siquis dominus noster custodio diuina dispositione...\" -- fol. 84v-87v: \"[incipit] Alexander vi venerabilibus futurus...uel collectis et [digites?] in casibus etiam [archepolitanum?] post pontificalibus...\"", "Section 3: Fol. 90-91v: Innocent VIII (1486) \"[margin] Bulla Innocentium...\" \"[incipit] Innocentius episcopus...ad perpetuam rei memoriam romanum pontificum in quo diuina...Providentia omnium specta...anno millesimo quadragentesimo octavagesimo sexto, xi kalendas septembris...\" -- fol. 92-94v: \"[incipit] Alexander VI, Dilecte filio petro de Campania et leo Aquint. Regimini universalis ecclesie quamquam insufficiente libris...Jo. de Gaines, F., de Attavantis F., de Valencia\" -- fol. 94v- 96: Alexander VI, ending \"A. drapo, A. de Cabredo, F, de Attavantis\" -- fol. 96-98: (new hand) Julius II (1504).", "Section 4: Fol. 104-111: (new hand) Eugene IV \"[incipit] Eugenius episcopus seruus seruorum dei ad perpetuam rei memoriam. Licet ea que de mandato nostro finit plenam obtineant...\" -- fol. lllv-118: \"[incipit] Dilecto filio magistro Lelio de Theranio Canonico felicem scriptoris et...Grata deuotionis et familiaritatis obsequia que nobis et apostolice sedi hactenus...\" (ending mentions Innocent VIII) -- fol. 118-119v: Alexander VI \"[incipit] Dilectis in christo filiabus abbatisse monasterii sancte Elisabet de Valencia [?] sororibus tam p[?]tibus apud [?] regularem vitam...\" -- fol. 120-121: \"[incipit] Ad perpetuam dei memoriam, Dilectis filius...\" -- fol. 121v-123v: Pius II (1459) \"[margin] Supprimitur monasterium et...\" -- fol. 123v-126: \"[margin] Ecclesiam Avinonensis reduantur de Regularii ad secularium\" \"[incipit] Venerabili...Juliano Episcopo sabianenesi cardinalis petrum ad vinculo...\"", "Section 5 (petitions): Fol. 128-129: records of a petition and the resulting decision, ending \"...Fiat ut petitur, R., \" \"[margin fol. 129] Fiat R\" -- fol. 129rv: \"[note] Car S praxedis\" -- fol. 129v-130: \"[margin] Fiat R\" -- fol. 130v -133v: \"[incipit] Julius II, Ad perpetuam rei memoriam, In superior dignitatis specula...\" -- fol. 134-137: Sixtus IV (1482) \"[margin] Erectio Capelle des Moutiz (or Moutim) les tours in Colle...\" \"[incipit] Sixtus, Ad perpetuam rei memoriam, Illius qui pro (mentions Ludovicus, king of France)\" -- fol. 137-138v: Sixtus IV -- fol. 139-143: Innocent VIII (1485) -- fol. 143v-147v: Julius [II] \"[margin] Ecclesiae Brandeburgensis...\" -- fol. 147v-150: Iulius [II].", "Section 6 (various letters, many concerning new foundations): Fol. 153- 155: \"[incipit] Ad perpetuam rei memoriam, Tertiarum omnium...\" -- fol. 156: \"[text] Confirmatio exemptionis omni noua exemptione ac certorum priuilegiorum quorum tenores habetur professis [incipit] Ad perpetuam rei memoriam, Romanum pontifex pacem et [quietem?] semper desiderans subditorum...pro parte dilectorum Ludouici abbatis et conventus monasterii beatorum Marie et petri apostolorum...ordinis sancti bernardi Senonentii diocesis...\" -- fol. 157rv: \"[text] Comittitur erectio vicarie et receptio illius cui habeat conferri in canonicorum ordinis sancti Augustinum et reseruatio iuris nominari dei et profundi...[incipit] Ex iniuncto nobis de super apostolice seruatis officio ad ea libenter intendimus per que beneficia ecclesia ualeant ubilibet propagacio et Regualarem vitam...pro parte dilecte fili magistrum Antonii de Narbonesio presbiterum [Caturcensis diocesis]...canonicos prior, beate marie de Caylario ordinis sancte Augustine Lemouinencii dyocesis...\" -- fol. 158: \"[text] Committitur Erectio cap[itule] iuxta voluntatem testatoris defuncti et apostolica bonorum pro eis dote cum prestate compellendum detentores ad ill consignandum ac reseruatio Iuris prioratis quotiens per...hac prima uite uacarie...ac prouisio illius ab illa...fundatione vacantis...[incipit] Beatissime pater Olivi quondam angeletus...quod in ecclesia sancti angeli dicti castri una perpetua [capma?] pro vno perpetuo capellano missas et alia diuina...\" -- fol. 158rv: \"[incipit] Ex iniuncto nobis de supri quamquam insufficientibus meritis apostolice...quod oliui quondam angeletus eni...Spoletanii diocesis...\" -- fol. 159: \"[incipit] Ad perpetuam rei memoriam, Ex iniuncto nobis de super quamquam insufficientibus meritis apost...officio ad rei libenter intendimus...quod oliui quondam angelus...anno videlicet Mccclxxxxxii de bonis...\" -- fol. 159v-160: \"[text] Erectio, Committitur resignatio parochialis ecclesie et suprimitur nomen rectoris illius ac in illa...\"[incipit] Iudex...\" -- fol. 160v-161: \"[text] Cessio regiminis monasterii monialium cum pensione procede. Et supressio ordinis...ac erectio...[incipit] Romanum pontificis prouidenter\" -- fol. 161-162: \"[margin] Erectio cappellanis...\" -- fol. 162v-163: a petition with marginal notes underlining important points, for example \"Conceditur episcopo,\" \"petitur,\" etc. -- fol. 164v: \"Licentia,\" \"Reservatio,\" \"exemptio\" -- fol. 165v-166v: short judgement -- fol. 167-169v: long petition with marginal notes -- fol. 169v-172: petition followed by short judgements -- fol. 172v: \"[margin] pro erectione cappelle\" -- fol. 173: \"[text] Confirmatio erectionis capellane per ordinarium confirmate cum certis patris [?] inter fundatorie et rectorem ecclesie in...[incipit] Ad perpetuam rei memoriam, Per fidelium vota ex quibus -- fol. 173v: \"[text] Confirmatio concordie inter episcopum et capitulum Nicien[cis] ex una ac comitatem Nicien[cis] ex alia partibus...\" -- fol. 175rv: \"[text] Erectio Capelle in college\" -- fol. 176rv: \"[margin] Nova erectio prioratus...\" -- fol. 177v-178: \"[margin] Erectio [capelle?] [incipit] Alexander, Dilectis filius archiepiscopo et...ac antonio de boniensis, Inter curas...\" -- fol. 178v-179: John XXII \"[margin] Erectio studii generalis in civitatis caturcensis [Cahors] [incipit] Johannis pape xxii, Ad perpetuam rei memoriam...pontificatus nostri anno sextodecimo\" -- fol. 180-181v: Theodoricus (?) -- fol. 181v-182v: Innocent VIII (dated 1485) -- fol. 183-186v: Alexander VI \"[margin] monasterio supprimitur\" -- fol. 186v-188: Sixtus IV -- fol. 189-190v: \"[incipit] Alexander, Venerabili fratri episcopo constanencium, Vt inter beatudinis amatrices habitu sacre religionis...\" -- fol. 191-193: \"[margin] translatio ecclesie...\" -- fol. 194-197v: \"[incipit] Dilectio filius maioris et sancte marie in Gallinei...\" -- fol. 198rv: Alexander IV \"[text] Confirmatio erectionis...ecclesie...\" -- fol. 199-202v: \"[margin] Erectio cappellanis\" -- fol. 203-208: Alexander VI (1494) -- fol. 208-212: \"[margin] probatur fundatoris ecclesie\" - - fol. 215-216v: \"[incipit] Dilectis filiis prori priotatus sancti saluatorum...\" -- fol. 217-218: Alexander VI (1500) \"[incipit] Dilectis filiis Reginaldo subdecani et [?] de sancti c[?] ecclesie...\" -- fol. 218v-219: Alexander VI (1502) -- fol. 219v-220v: Sixtus IV (1480) -- fol. 220v-222v: Sixtus IV (1484) -- fol. 224v-225: \"[margin] suppresio\" -- fol. 227-228v: \"[incipit] Sacre religionis sub qua dilecti filii [servos?] ordinis predicatorum...\" -- fol. 229-231v: \"[margin] Erectio parrochialis in Collegiatam, motu proprio [incipit] Sixtus IV, Ad perpetuam rei memoriam, Ex superio prouidentia...\" -- fol. 231v-232v: \"[incipit] Hodie motu proprio parrochialum...Ville de Alesto...\" -- fol. 232v-234: Sixtus IV \"[margin] confirmatio dicte rectionis\" -- fol. 234-235: Sixtus \"[margin] Vno prioratus\" -- fol. 235v-236: Innocent VIII -- fol. 236-237v: Alexander VI -- fol. 237v- 239v: Julius II \"[text] Confirmatio cum nova erectionis duorum...\" -- fol. 240-242v: Alexander VI -- fol. 243-245v : Alexander VI \"[text] Commititur confirmatio erectionis vnus et erectio alterius beneficorum...\" -- fol. 245v-251: Alexander VI \"[text] Suppressio monasterii...\"", "Section 7 (letters confirming unions): Fol. 290: a short paragraph that clearly seems to be a note concerning a union -- fol. 319rv: Nicolas (V?) \"[ incipit] Nicolaus episcopus servus servorum dei ad futuram rei memoria...Ex iunctio nobis de super...\" -- fol. 321: \"[margin] Gregorii, Confirmatio vnionis autem ordinaria facte de duobus prioratibus ad invicem -- fol. 343: Leo X (in the sixth year of his reign, 1519) \"[incipit] Dilectis filio decano...\""], "650 0": ["Letters, Papal"], "008": ["100427q14901519it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Alexandre Roberts, April 2010."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100427035855.0"], "505 0": ["Section 1: Fol. l-49v: Thirty nine letters, mostly from Pope Alexander VI, with a few earlier letters from Innocent VIII and Sixtus IV -- fol. 1-4: \"[incipit] Alexander VI. Ad perpetuam rei memoriam, cum attento considerationis\" -- fol. 4v-5v: Innocent VIII, dated 1490 -- fol. 5v-6v: Alexander VI to a bishop, ninth year of his pontificate -- fol. 6v-7v: Alexander VI to \"dilecto filio Lodovico du Val presbitero\" (in two paragraphs, ending with a judgement) \"[incipit] Nobilitas presentes uestro...\" -- fol. 8rv: Alexander VI \"[incipit] Ad perpetuam rei memoriam, Postulare...\" -- fol. 8v-9: Alexander VI \"[incipit] Ad perpetuam rei memoriam, Ad fidei catholice...\" -- fol. 9-10: Alexander VI \"[incipit] Ad perpetuam rei memoriam...\" -- fol. 10-11v: \"[margin] Absolutio pro fratre [?] sancta Ja. de Sp[?]\" \"[incipit] Sedes apostolica...\" -- fol. 12-13: Alexander VI \"[incipit] Venerabile seu moderno episcopo Universari Vicariis romanorum dilecte filio abbatis monasteriis S. Thome Burgundiones...pontificatus nostri anno nouo\" -- fol. 13v-14: Alexander VI \"[margin] Indulgentia pro capella regnorum Anglia\" -- fol. 14v: \"[marginal note] Iudex\" -- fol. 14-15v: \"[incipit] Alexander VI, Dilecto filio Magistro Eutt de Blandare...Gratia deuotionis et familiares obsequia...\" -- fol. 15v-17: Alexander VI (dated 1501) \"[margin] Confirmatio ecclesie...domus ordinis praedicatorum\" -- fol. 17v-18: Alexander VI (dated 1500) -- fol. 18-19v: \"[incipit] Alexander VI Carrissimo in christo filio Iohanni dant...\" -- fol. 19v-20: Innocent VIII -- fol. 20-21v: Alexander VI \"[margin] Promisio vnus proratis...\" -- fol. 22-22v: Alexander VI, to Nicholas, a Cistercian Abbot from the diocese of Brandenberg -- fol. 24-25: Sixtus IV \"[margin] Erectio studii...\" -- fol. 25- 26: Sixtus IV -- fol. 26-27: Alexander VI to \"Dilectio filio Bernardo Andree,\" rector of Toulouse (?) -- fol. 27rv: Alexander [VI] to a Bishop -- fol. 27v-28: Alexander [VI] to \"Dilecto filio Bernardo Andree\" -- fol. 28-30v: Alexander [VI] -- fol. 30v-31v: Alexander VI \"[margin] copia indul, R. d.\" -- fol. 32v-34: \"[incipit] Dilectio filio magistro Guillermo de p[?] cap[no]...\" -- fol. 34- 35v: no heading -- fol. 36-37v: \"[incipit] Dilectio filio magistro domino Jarebario cap[no] nostro...palatii apostolici auditorii...\" -- fol. 43-45 \"[margin] Reservatio\" -- fol. 47-49v: \"[incipit] Alexander VI Ad perpetuam rei memoriam, Inter nostras multiplices que nobis ex apostolatus officio...pontificis nostri anno decimo\" (and later) \"Hadrianus / Io. de Saldana.\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS239": {"001": ["06-B3615"], "245 10": ["Libellus penitentialis in septem libris divisus."], "505 0": ["Fol. 1r-36v: \"[rubr.] Incipit libellus penitentialis in septem libros divisus a magistro Iohanne de Deo hispano doctore decretorum editus. [text] Venerabilis patri ac domino ac divina providentia...Hec est regula necessitatis a prioribus approbata quod nichil facias commendandi...acquiruntur regnum Dei. [rubr.] Explicit liber scriptus ad honorem summe trinitate et individue unitate in nomine Patris et Filii et Spiritus Sancti. Amen. A magistro Iohanne de Deo compilatum Deo gratia. [colophon] En ego quem genuit pia patria Portuguensis diva cathedravit urbis schola Bononiensis. Hoc opus aptavi domino non absque labore sed labori est facilis Christus superatus morte.\""], "520": ["The Libellus Penitentialis by Joa\u00f5 de Deus is here complete, and has some marginal notes by the scribe himself. No index or table of contents is provided."], "100 0": ["Joa\u00f5 de Deus,|d1732-"], "852 8": ["CUL|bRBCAG|hRobbins MS 239|xCIN=JKN"], "008": ["060728q14501475gw ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. Use of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "300": ["36 leaves :|bpaper ;|c315 x 220 (235 x 138) mm bound to 320 x 220 mm."], "561": ["On inside front cover, bookplate that reads: \"Ex libris Ernst Fischer 1905. Hans Vischer 1399. Vallen Fischer 1570\"; this ex-libris shows a page holding a coat of arms with two fish on it. In the manuscript are inserted two sheets written in Latin and German by two different German hands (both 20th century) describing the text and the manuscript itself. One of the sheets has a shelfmark \"Hs. 9\" written in the upper corner, which was a shelfmark from a former owner. On inside back cover, there is the number \"14880\" written in pencil by a 20th century hand."], "500": ["Ms. codex.", "Title from the opening rubric, fol. 1r.", "Collation: Paper, fol. i (modern paper) + 36 + i (modern paper) ; 1-3\u00b9\u00b2. Catchwords on the right side of the bottom margin, on verso, by the hand of the scribe. No contemporary foliation and no quire numbers are visible. Two visible watermarks: one very close to Briquet 2403, \"Balance\"; the other one very close to Briquet 14548-50, \"Tete de boeuf\".", "Layout: Written in 2 columns of 40 lines, below top line. Frame ruled in ink. Guide text for the rubricator cropped but still visible on most folios. Wide margins and some marginal notes in them.", "Script: Written in a tidy cursive bastard script by one scribe who apparently wrote the rubrics too.", "Decoration: Red simple initials on 2-4 lines, occasionally penworked. Red rubrics throughout the text.", "Binding: 19th century quarter calf over pasteboard, covered with marbled paper.", "Origin: Written in Germany, in the third quarter of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 239."], "090 8": ["Robbins MS 239"], "260": ["[Germany,|cbetween 1450 and 1475]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS184": {"001": ["ocn232164394"], "260": ["Italy,|cbetween 1626 and 1628"], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["A collection of reports, briefs, and related documents, dated 1626-1628, submitted from dioceses all over Italy mostly to the Sacra Congregazione super Controversiis Jurisdictionalibus, although there are a few submitted to the Sacra Congregazione dell'Immunita' et Jurisdictione Ecclesiastica (e.g. fol. 42r-44v: \"Per li diaconi selvaggi di Hostuni (i.e. Ostuni).\" All of these documents bear the name \"APD Merlino.\""], "300": ["|3Original:|a120 leaves :|bpaper ;|c274 x 206 ( 223 x 157) mm bound to 297 x 218 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS 184)"], "510 4": ["Phillipps, T. Cat. ms.,|c7594."], "008": ["080617i16261628it 000 0 ita d"], "099": ["Robbins MS 184"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, June 2008."], "003": ["OCoLC"], "245 00": ["[Collection of reports, briefs, and related documents submitted to the Sacra Congregazione super Controversiis Jurisdictionalibus]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Was once in the collection of Sir Thomas Phillipps (his no. 7594); library stamp on fol. 1r: \"Bibliot. H. F., 1710.\""], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: paper (similar but not identical to Briquet, Oiseau 12250) fol. vi + 106 + fol. iv (paper); gatherings irregular.", "Layout: Written in long lines.", "Script: Written in cursive script by various hands.", "Binding: Limp vellum binding with leather fore edge ties (lacking). Title on spine: \"Positiones S. Cong. IM ECC APD Merlin.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 184."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL"], "005": ["20080618115555.0"], "035": ["(OCoLC)232164394"], "546": ["Mostly Italian, some Latin."], "LEADER": ["00000ntc 2200000Ia 4500"]}, "RobbinsMS79": {"001": ["06-B4237"], "245 10": ["[Summa]"], "505 0": ["Fol.1r-286r: \"[text] Quoniam ignorans ignorabitur, sicut ait Paulus...[rubr.] Incipit summa fratris Monaldi ex multis auctoritatibus compilata. De abate. Quis possit esse abbas. [text] Abbas debet esse...quasi stelle in perpetuas eternitates cum hiis qui ad iustitiam multos erudiunt in celesti gloria peremniteriter fulgeamus. Amen. [rubr.] Explicit Summa fratris Monaldi de ordine fratrum Minorum.\""], "520": ["This manuscript is a very neat copy of the so called \"Summa Monaldina\", with very few marginal notes. It was probably written in Italy but, in the 15th century, it came in the possession of Arnoldus de Gheel from Hertogenbosch, Holland. Material on fol. 286rb-288ra fills lacunae in the previous text. Cuts in the outside margin of several folios; stitched cut fol. 210. Cloth place markers (one blue, two green) probably of a much later date."], "510 4": ["Bibliotheca belgica manvscripta, sive, elenchvs vniversalis codicvm MSS. in celebrioribvs Belgii coenobijs, Ecclesijs, ac Priuatorum Hominum Bibliothecis adhuc latentium, 2 vols. (Lille : T. LeClercq, 1641-44; reprint, Farnborough, England: Gregg Press, 1969), 2:164."], "100 0": ["Monaldo,|cda Capodistria,|dca. 1210-ca. 1280."], "852 8": ["CUL|bRBCAG|hRobbins MS 79|xCUL=JKN"], "260": ["[Italy?,|cbetween 1280 and 1320]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio: |aq. i. cum uno"], "581": ["Monaldus, Summa perutilis atque aurea venerabilis viri fratris Monaldi in utroque jure tam civilique canonico (Lugduni: Venundantur per Petrum Baleti, [1516?])."], "008": ["060831q12801320it ||||||||||||00|||lat|d"], "546": ["Latin."], "300": ["|3Original: |a291 leaves :|bparchment ;|c280 x 200 (195 x 135) mm bound to 285 x 220 mm.", "|3Copy: |a1 microfilm reel :|bpositive (Robbins MS 79)"], "561": ["The manuscript belonged to one Arnoldus de Gheel from Hertogenbosch (ex libris on fol. 291v: \"Liber Arnodi de Gheel Busceducensis\"); thereafter the book resided in the library of the Premonstratensian Abbey of Parc, near Louvain (library pressmark on back of front cover: \"K IV\") and was reported in 1636 as Summa fratris Monaldi, in pergameno by Abbot Jean Maes (1635-36), who compiled a list of the library's holdings at the time; this list was then printed in Antonius Sanderus's Bibliotheca belgica manuscripta (see bibliography). Part of the books in the library were bought by John Lee (born Fiott; 1783-1866) of Hartwell House near Aylesbury, England (his inscription on back of front cover: \"I. Lee. Doctors Commons\"); the manuscript was repaired for Lee in 1835 (inscription on back of front cover, probably in Lee's hand: \"repaired August 1835 No 10/93\"). Unidentified shelfmarks: \"126\" and \"No. 18\" on f. 1r."], "500": ["Ms. codex.", "Title from closing rubric, fol. 1r.", "Collation: Parchment, fol. i (modern paper) + 291 + i (modern paper); 1-25\u00b9\u2070 26\u00b9\u2074 27\u00b9\u00b2 28\u2078. No contemporary foliation, no quire numbers and no catchwords are provided.", "Layout: Fol. 1r-286r, written in two columns, 32 lines for each column; fol. 286r-288r, written in two columns, 64 lines for each column. Ruled in ink. Wide margins.", "Script: Written in a textualis libraria script by several hands, below top line.", "Decoration: Fol. 1r, a 10-line initial, blue and gold, with blue and gold pen flourishing. Fol. 1v, a 7-line initial, blue and gold, with blue and gold pen flourishing. Many 2-line alternating blue and red penworked initials throughout the text. Alternating red and blue paragraph marks. Red rubrics. Many initials in the text touched in red. \"J-decorations\" penworked in blue and red.", "Binding: Tan calf over boards, 18th century, bearing gilt armorial (most likely of the library at the Abbey of Parc) that was effaced when the library was sold in 1829. Title on spine: \"Fratris Monaldi summa ex multis auctoritatibus compilata.\" Kept in brown, cloth-covered box with leather spine; title on box spine: \"Monaldus Summa MS on vellum.\"", "Origin: Possibly written in Italy, according to the features of the script, between the end of the 13th century and the beginning of the 14th.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 79."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "090 8": ["Robbins MS 79"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=48;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS53": {"001": ["06-B2875"], "260": ["Italy, |c[between 1675 and 1699]"], "505 0": ["Fol. 1r-35r: \"[text] Negli affari ordinarii Monsignor di Pamiers prendeva avviso...e questo e stato che m'ha fatto sempre il maggior rimorso in Roma, il vedere, che tutto cio, che si faceva, sembrava contrario all'intenzioni del Papa\"; fol. 35v-37r: \"[text] Capitolo ultimo. Nomi e qualit\u00e0 d'alcune persone delle quali spesso si \u00e8 parlato in questa memoria\"; fol. 37v-39v: Table of contents; fol. 40: blank."], "520": ["An accounting, in 14 chapters, of what happened in Rome before Monsignor Pamiers with respect to the issue of regalian rights. The final part of the main text is an alphabetical list of people mentioned in the main text, stating their position within the Church and the parties with which they allied themselves with respect to the controversy over regalian rights."], "650 0": ["Regalia.", "Church and state."], "300": ["|3Original: |a40 leaves :|bpaper ;|c263 x 196 (213 x 135) mm bound to 267 x 207 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 00-51) and positive (Robbins MS 53)"], "510 4": ["Phillipps, T. Cat. ms., |c6427."], "852 8": ["CUL|bRBCAG|hRobbins MS 53|xCIN=JKN"], "008": ["060614q16751699it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Memoria di quello che \u00e8 passato a Roma e a Pamiers su l'affare della regalia."], "546": ["Italian."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "561": ["Manuscript was once with the holdings of the Libraria Colonna (stamp on ff. ir, 1r, 40v); it then became part of the Phillips collection, catalog number MS 6427."], "500": ["Ms. codex.", "Title from first page of text.", "Collation: Paper (watermark depicts a bird sitting atop a mountain, all within a circle), fol. ii + 40; 1\u00b9\u2070 2\u00b9\u2074 3\u00b9\u2070 4\u2076 (6 is pastedown).", "Layout: Written in 21 long lines.", "Script: Written in a secretary script by one hand.", "Binding: Bound in brown paper.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 53."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL"], "090 8": ["Robbins MS 53"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS42": {"001": ["06-B2027"], "260": ["[Germany,|c14--]"], "505 0": ["Fol. 1ra-5ra: \"[text] In civitate Romana sunt quinque ecclesie que patriarchales dicuntur videlicet ecclesia Sancti Johannis Lateranensis...Teutonici Gallici Ungari provinciales Siculi Byenniis Anglici Yspani Trienniis Ultra montana Quadrieniis Apuli Ytalici Singulis annis\"; fol. 5ra-5rb: \"[Tractatulus de coronacione imperatoris] De Romano imperatore...De Constantinopolitaneum...De Regibus christianorum\"; fol. 5va-5vb: \"[Nota de familia Herodis et de salvacione nacionum] In nomine domini amen ante Nativitate domini nostri Ihesu Christi Rex herodes regnabat...aliorum infidelium nacionum orientis seu quarum cumque aliarum parcium proficientibus etc. Explicit provinciale tocius mundi ecclesie.\""], "520": ["Description of the organization and offices of the churches of the Christian world."], "581": ["Provinciale omnium ecclesiarum excerptum a libro Cancellariae Apostolicae (Lugduni: Matthias Bonhomme, 1546); A. Werminghoff, \"Ein Tractatus de coronatione imperatoris aus dem vierzehnten Jahrhundert,\" Zeitschrift der Savigny-Stiftung f\u00fcr Rechtsgeschichte (Germanistische Abteilung) 24 (1903): 380-385."], "852 8": ["CUL|bRBCAG|hRobbins MS 42|xCIN=JKN"], "008": ["060502s14uu gw ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Provinciale tocius mundi ec[cles]i[e]"], "546": ["Latin."], "300": ["|3Original:|a5 leaves :|bpaper ;|c295 x 197 (200 x 140) mm bound to 305 x 204 mm.", "|3Copy: |a1 microfilm reel :|bnegative and positive (Robbins MS 42)"], "561": ["Manuscript was once owned by the Guettenstein convent (fol. 1r: \"ex libris conventus Guettensteinensis\"); thereafter it belonged to Jorg Schafer."], "500": ["Ms. codex.", "Title from explicit (fol. 5vb)", "Collation: Paper, fol. i (modern paper) + 5 + ii (modern paper); 1\u2076\u207b\u00b9.", "Layout: Written in 2 columns of 48 lines; horizontal and vertical bounding lines in ink.", "Script: Written in a batard script by one hand.", "Binding: Bound in printed sheets from a glossed law tract with rubrics in red and initials in red and blue.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall) Robbins MS 42."], "583": ["|zCataloged from existing descripiton by Luminita Florea and in hand by Kathleen A. Stewart and Jennifer K. Nelson, May 2006."], "090 8": ["Robbins MS 42"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=28;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS144": {"001": ["ocn244251075"], "260": ["Rome,|cca. 1721."], "040": ["BOL|eamremm|cBOL"], "520": ["A collection of fifteen documents - 12 handwritten copies of letters and 3 printed letters - illustrating Cardinal Giulio Alberoni's fall into disfavor, his banishment, and the efforts of the Vatican to have him arrested and deprived of his cardinalate between 1717 and 1721. The documents include a series of Alberoni's correspondence (one letter bearing his signature, 28 May 1720, fol. 24v) with Spanish and Vatican representatives, and three printed pamphlets and printed letters commenting on the events and the extent of Alberoni's culpability, including the printed brief written in his defense at the time of his imprisonment (1721)."], "510 4": ["Phillips, T. Cat ms.|c6191."], "561": ["Manuscript was once in the possession of the Colonna family (their red stamp depicting a column on the front flyleaf, title page, and last leaf); also in the possession of Frederick North, Earl of Guilford (his 641/ 3) and in the collection of Sir Thomas Phillipps (his no. 6191)."], "099": ["Robbins MS 144"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5BOL."], "245 00": ["Scritture e lettere nella causa del Cardinale Albaroni = [Documents and letters regarding the case of Cardinal Giulio Alberoni]"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "600 10": ["Alberoni, Giulio,|d1664-1752."], "500": ["Ms. documents.", "First part of title from title page (fol. 2r); remainder of tite supplied by cataloger.", "Binding: Bound in brown paper over pasteboard; remains of ties at fore edge (part of backstrip lacking).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 144."], "505 2": ["Fol. 3r-4r: introduction -- fol. 5r-36v: letters -- fol. 37r-70r: 2 printed letters -- fol. 71r-81r: letters -- fol. 83r-90v: printed letter."], "700 3": ["Colonna family,|4asn|4fmo|5BOL."], "008": ["080821s1721 it 000 0 ita d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2008."], "546": ["Italian."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080821125838.0"], "300": ["88 leaves :|bpaper ;|cbound to 290 x 218 mm."], "035": ["(OCoLC)244251075"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS154": {"001": ["06-B4160"], "245 10": ["Aguirre contro le dichiarazioni del clero gallicano in difesa della catedra di Pietro :|bosservato compendiosam[en]te nelle cose pi\u00f9 notabili."], "505 0": ["Fol. 1rv: blank ; fol. 2r: \"[title] Aguirre contro le dichiarazioni del clero gallicano in difesa della catedra di Pietro, osservato compendiosamente nelle cose pi\u00f9 notabili\" ; fol. 2v: blank ; fol. 3r-66v: \"[text] La prima censura di Fr. Michele de Fue[--]tises merita d'esser considerata...chiudendo con Sant'Agostino il quale scrisse Nimis perverse se amat qui et alios vult errare ut error sus lateat\" ; fol. 67r-68v: blank."], "520": ["Joseph S\u00e1enz de Aguirre's work against the 1682 Declaration of the Gallican Clergy. Many marginal notes and corrections throughout in a hand that is different from the one that wrote the main text."], "300": ["68 leaves :|bpaper ;|c265 x 196 (240 x 102) mm bound to 272 x 210 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 154|xCIN=JKN"], "008": ["060828q16821725it ||||||||||||00|||ita|d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "546": ["Italian."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "100 1": ["S\u00e1enz de Aguirre, Jos\u00e9,|d1630-1699."], "561": ["On front pastedown is written in modern pencil \"A-4.\""], "500": ["Ms. codex.", "Title from title page (fol. 2r).", "Collation: Paper (watermark depicts an anchor within a circle with a 6-pointed star on top), fol. 68; 1\u00b2 2\u2078 3\u00b9\u00b2 4\u2076 5\u2078 6-7\u2074 8-9\u2076 10-11\u2074 12-13\u00b2.", "Layout: Written in 31 long lines; vertical bounding lines made by folding.", "Script: Written in a cursive script by one hand.", "Binding: Vellum over pasteboard. Traces of ribbon ties at fore edge, only one still attached and another torn off and kept in manuscript file. Continuous endsheet and pastedown.", "Accompanying materials: 18th cent. (?) note tipped in between front endsheet and pastedown that describes manuscript, now kept in manuscript file.", "Origin: The Declaration of the Gallican Clergy was published in 1682, so this text must have been written after that.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 154."], "090 8": ["Robbins MS 154"], "260": ["Italy,|c[between 1682 and 1725]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS39": {"001": ["ocn455550608"], "245 10": ["De his quae practicantur in regno in materia jurisdictionis ecclesiasticae :|bPropter necessariam, atque naturalem illiusque personarum defensionem, rectam, et pacificam gubernationem."], "040": ["BOL|eamremm|cBOL"], "520": ["A treatise conderning ecclesiastical jurisdiciton during the period of Kingdom of Naples under Spanish rule."], "300": ["|3Original:|a302 leaves :|bpaper ;|c330 x 215( 240 x 140 ) mm bound to 340 x 220 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-39) and positive (Robbins MS 39)"], "260": ["Italy,|c1600s."], "099": ["Robbins MS 39"], "581": ["Salmeron, Alfonso. Epistolae P. Alphonsi Salmeronis ex autographis vel originalibus exemplis potissimum depromptae a patribus ejusdem Societatis nunc primum editae, 2 vols.(Romae: Institutum Historicum Societatis Iesu, 1971-72), 2:338-341 (for the printed version of article 1, edited from MS Rome, Bibliotheca Barberiniana, XXXIII, 168, duplici fol., nn. 160, 162)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was at some point in the holdings of a private library, likely in Italy (library stamp on f. iiir: \"Bibliotheca privata [illegible]\")."], "500": ["Ms. codex.", "Title from title page (fol. vr)", "Layout: Written in 23 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: Vellum over pasteboard.", "Origin: 17th manuscript copy of a 1573 text.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 39."], "035": ["(OCoLC)455550608"], "610 10": ["Naples (Kingdom)."], "008": ["091009q16001699it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Pamela Diaz, September 2009."], "100 1": ["Salmer\u00f3n, Alfonso,|d1515-1585."], "546": ["Text in Latin; introductory material in Italian."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20091009023350.0"], "505 0": ["Fol. iir\" \"[Preface] Nel presente volume si contengono molte allegazioni trattati, et consulte pregiudiziali alla giurisdizione, et liberta ecclesiastica, et perche ve ne sono alcune del Regente Villano, ministro in quel tempo deputato alle materie giurisdizionali...et per la pura obbedienza che sono obbligato a rendere al vicario di Christo in confirmazione et attestazione della verit ho dettato, et sottoscritto di mia propria mano la presente, hoggi giorno di S[an]ta Barbara a 4 di Decembr[e] 1573. Ita est ut supra scribitur. Alphonsus Salmeron\" ; fol. iiv -ivv: \"[introductory material] Retrattione et protesta del Regente Villano per l'offesa fatta alla giurisdizione ecclesiastica nel Regno di Napoli, riferita dal P[adre] Salmerone della Comagnia di Gesu al nuntio di Napoli ; fol. vr: Title page ; fol. 1r: Table of contents ; fol. 2r -293r: \"[text] De violentia iudiciis ecclesiastici per regem auferenda, summarium. Violentia, quae ab ecclesiasticis infertur in laicos debet esse evidens et notoria ut ad remedia deveniri possit...Regentis, quod poterat tantum ab ipso eius nomine peccati absolutio, prout fuit petita et concessa.\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS230": {"001": ["06-B3624"], "245 10": ["Liber sextus decretalium ;|bRegulae iuris."], "505 0": ["1. Fol. iv: \"[table of contents] De summa veritate et fide catholica...regulis iuris, 98.\""], "505 8": ["2. Fol. 1r-99v: \"[rubr.] Incipit liber VI Decretalium domini Bonifatius (sic) pape VIII. [text] Bonifatius episcopus servus servorum Dei. Dilectis filiis doctoribus...quod illicitam reputamus.", "3. Fol. 97v-99r: \"[rubr.] De regulis iuris. [text] Beneficium ecclesiasticum non potest licite sine canonica...complectens contra legis nititur voluntatem. [rubr.] Explicit liber sextus Decretalium.", "4. Fol. 99rv: \"[text] Privilegium monasterio tuo concessum ut monachi sive fratres in cellis ad monasterium ipsum spectantibus...negociis abesse contingat.\""], "520": ["The Liber sextus Decretalium completed with the Regulae iuris, and followed by a brief unidentified text concerning a privilege. A table of contents is added by a later hand on flyleaf iv."], "100 0": ["Boniface|bVIII,|cPope,|dd. 1303."], "852 8": ["CUL|bRBCAG|hRobbins MS 230|xCIN=JKN"], "008": ["060728q13501375fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "300": ["99 leaves :|bparchment ;|c335 x 235 (230 x 160) mm bound to 345 x 250 mm."], "561": ["Inside back cover there are 2 bookplates: the first one reads \"Ex libris K.A. Jacobsen\", and the other one reads: \"Ex libris Ole Lars Jacobsen\". The first one shows two snakes on a staff, with a bird perched on top."], "500": ["Ms. codex.", "Title from the opening rubrics on fol. 1r and 97v.", "Collation: Parchment, fol. i (medieval parchment) + 99, 1- 5\u2078 6\u2076 7-10\u2078 (quire 10 lacks first folio) 11\u2074. Catchwords in the middle of the lower margins. Leaves numbered with a series of tiny vertical red lines, or dots, in the right lower margin on recto, or with Roman numerals placed in the middle of the lower margin. Double original foliation in the upper right corner, in black ink: the same numbers are written twice by two different hands, once by the scribe himself and once by the rubricator.", "Layout: Written in two columns, 30 lines, below top line. Ruled in ink and lead. Wide margins, sometimes to host marginal notes by a later cursive hand.", "Script: Written in textualis libraria script quite close to the formata script, by one hand.", "Decoration: A large 7-line red and blue pen flourishing initial on fol. 1r. Several red and blue pen flourishing initials on 2 lines throughout the text. Red rubrics and red paragraph marks.", "Binding: White and green stenciled paper over pasteboard, 19th century. Quarter vellum, the spine reads: \"Lib[er] VI Decret[alium] Bonif[atii] VIII\" written by a 17-18th century hand.", "Origin: Written in Northern France, in the third quarter of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 230."], "090 8": ["Robbins MS 230"], "260": ["[Northern France, |cbetween 1350 and 1375]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=101;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS50": {"001": ["06-B2649"], "245 10": ["Non pu\u00f2 esser papa chi non \u00e8 cardinale :|bDiscorso da passar per mano de S[ignori] Cardin[ali] a guisa di epistola circolare /|cDi Berdardino Borgarucci."], "505 0": ["Fol. 1r-44r: \"[title] Non pu\u00f2 esser papa chi non \u00e8 cardinale. Discorso da passar per mano de Signori Cardinali a guisa di epistola circolare\"; fol. 2r: \"[prefatory letter] Fu quasi universale oppinione nell'ultima sede vacante che il Conclave forse riuscir longo...bacio all'Eccellenze Vostre le vesti. Roma xxv luglio 1647...Bernardino Borgarucci\"; fol. 3r-38r: \"[text] Nel principio della sede vacante il comendator Tagliaferro domand\u00f2 all'autore del presente discorso, se poteva esser Papa chi non era cardinale...vi sar\u00e0 succinta risposta all'apologia del gi\u00e0 Cardinale Belarmino ed alle assertive del Concilio di Basilea riferite dal Bzonio (?), e di nuovo l'autore implora il patrocinio benigno dell'Eccellenze Vostre. Di Marzo 1651\"; fol. 38r-43r: \"[appendix] Serviranno di apendice e per digressioni queste esemplari autorit\u00e0 per mostrare quanto d'ogni tempo siano stati graditi li scritti ecclesiastici...et i pi\u00f9 celebri furono Silvestro Aldobrandini, Marc Antonio Borghese et Antonio Panfilii\"; fol. 43v-44r: \"[author biography] L'autore dello stesso presente discorso ha servito la Sede Apostolica in pi\u00f9 occasioni...Per\u00f2 pronto ad aspettare, con la patientia di Moise, e di David, come tengono ordine gli amici di Dio\"; fol. 44v-47v: blank; fol. 48r-54v: \"[title] Capitula cardinalium. Noi infrascritti omnes et singuli sante Romane Ecclesie Cardinales episcopi presbiteri et [----] nobis in partem apostolice sollicitudinis...infrascriptum rogamus in super pessimis pubblicum confici [-------].\""], "520": ["Discourse, in the form of an open letter addressed to cardinals, on the topic that someone who is to be elected Pope must first have been a cardinal."], "300": ["|3Original: |a53 leaves :|bpaper ;|c268 x 200 (235 x 133) mm bound to 274 x 211 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 00-48) and positive (Robbins MS 50)"], "852 8": ["CUL|bRBCAG|hRobbins MS 50|xCIN=JKN"], "008": ["060606k16471651it ||||||||||||00|||ita|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "546": ["Italian and Latin."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "100 1": ["Borgarucci, Bernardino."], "561": ["Catalog number at base of spine reads \"5943\"; flyleaf at front of book reads \"No. 31 di catalogo.\""], "500": ["Ms. codex.", "Title from title page (fol. 1r).", "Collation: Paper (watermark of a bird between the letters \"A\" and \"N,\" all within a circle), fol. i + 54 (contemporary foliation; title page unfoliated, therefter foliated 1-8, 19-53, 18, 9-10, 87-92) + 1; 1\u2074 (fol. ii-iii are pastedown) 2\u2076 3\u2076\u207d\u207a\u00b9\u207e (fol. 7-9 are contiguous with fol. 46-48) 4-6\u00b9\u00b2 (quires 4-6 are nested inside quire 3) 7\u2076 8\u2074 (fol. ii-iv are pastedown).", "Layout: Fol. 1r-44r: Written in 37 long lines. Fol. 48r- 54v: Written in 22-24 long lines.", "Script: Fol. 1r-44r: Written in a neat secretary script by one hand (presumably Borgarucci's). Fol. 48r-54v: Written in a rushed, oft hard-to-read secretary script by a second hand.", "Binding: Bound in parchment.", "Origin: The main text, Borgarucci's Discorso, was written in Rome between July 25th 1647 (fol. 2r) and March 1651 (fol. 38r). The long conclave he refers to in his prefatory letter (fol. 2r) was presumably that of 1644, which resulted in the election of Innocent X.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 50"], "090 8": ["Robbins MS 50"], "260": ["Rome, |cbetween 1647 and 1651."], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS293": {"001": ["ocn785903431"], "260": ["Italy (Milan?),|c[between 1525 and 1575]"], "040": ["BOL|eamremm|cBOL"], "505 8": ["Fol. 128r-165v: Excerpts and quotes from commentaries on Book IV of the Decretals of Gregory IX: \"[title] De sponsalibus Rubrica (X., 4, 1, 1)...Finis quarti ad laudem dei amen.\"", "Fol. 165v-279r: Excerpts and quotes from commentaries on Book V of the Decretals of Gregory IX: \"[title] De accusationibus et inquisitionibus Rubrica\" (X., 5, 1, 1) (fol. 279v: blank).", "Fol. 280r-370r: Excerpts and quotes from commentaries on Books III to V of the Liber Sextus: \"[title] De testamentis (VI: 3, 11, 1)...De verborum significatione (VI: 5, 12, 4)...Finis [commentarii?] sexti libri decretali deo gratias et pie ipsius matri\" (fol. 370rv: blank).", "Fol. 371r-451r: Excerpts and quotes from commentaries on Books III to V of the Clementines: \"[title] De testamentis (Clem., 3, 6, 1)...De verborum significatione\" (Clem., 5, 11, 2).", "Fol. IIIv: Index written a different but contemporary hand."], "520": ["Excerpts and quotes from commentaries on Books III-V of the Decretals of Gregory IX, Books III-V of the Liber Sextus (VI: 3, 11, 1 to VI: 5, 12, 4), and Books III-V of the Clementines (Clem., 3, 6, 1 to Clem., 5, 11, 2). Excerpted commentaries favor the works of Niccol\u00f2 de Tudeschi and likely include those of Paulus Florentinus (Paolo Attavanti). Excerpts refer to additional authors by name. On rectos, current title is supplied in red in upper margin. Contemporary or near-contemporary foliation in ink. Script is a clear cursive bookhand. Some quires have catchwords. Strips of paper have been cut from the margins of some folios, but text is intact."], "300": ["454 leaves :|bpaper ;|c200 x 140 (134 x 87) mm bound to 210 x 140 mm."], "008": ["120417q15251575it 000 0 lat d"], "099": ["Robbins MS 293"], "003": ["OCoLC"], "245 00": ["[Excerpted commentaries on the Decretals, Liber Sextus, and Clementines]"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Provenance: Faint erased bookseller's marks on front flyleaf and pastedown."], "500": ["Ms. codex.", "Title from", "Collation: Fol. 454 (watermarks visible on fol. 3, 5, 11, 16, and 450. The watermark on 450 seems close to Briquet, \"Serpent,\" nos. 13672 and 13673 (Milan, 1545 and 1550).", "Layout: Written in 32 long lines", "Script: Chapter incipits are in larger rounded script with red initials and are numbered in margin. Manicula and \"notae\" point to passages of interest (e.g. fol. 252v, 253v, 374v), and there are some marginal annotations (e.g. fol. 4r, 254r, 378r).", "Decoration: Illuminated border cut from earlier manuscript and pasted on fol. 1r. Border is blue and pink baguette with white tracery terminating with colored foliate motifs with yellow, green, and gold details. Titles are centered in red. Each sentence begins on a new line with a red initial.", "Binding: Bound in light brown leather over pasteboard. Covers are stamped in black ink with multiple frames traced with filets. Ornamental and fleuron tools in intermediary and central compartments. Binding is also stamped with rope borders in its three compartments and floral borders on its two bands. Middle of binding is stamped with fleuron.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 293."], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez, October 2011."], "005": ["20120417105817.0"], "505 0": ["Fol. 1r-126v: Excerpts and quotes from commentaries on Book III of the Decretals of Gregory IX: \"[rubric] Rubrica prima de vita et honestate clericorum. In expeditione ipsius elici p[?]. IX conclusiones ut infra patebit. [Incipit] Continuatio triplex ponitur hic ad librum precedentem vide in flo[rentinus] g. 1. [title] Ut layci (X., 3, 1, 1)...Finis conclusionii 3ii [tertii] libri decretalium\" (fol. 127r-127v: blank)."], "035": ["(OCoLC)785903431"], "546": ["Latin."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS100": {"001": ["06-B4180"], "245 10": ["[Decretales cum glossa Bernardi Bottoni]"], "520": ["A beautiful manuscript written a short time after the promulgation of this essential text of Medieval canon law, and shortly after the compilation of its enormous commentary. The illuminations within historiated initials are of very high quality. The quality of the parchment is very high too, because the vellum is very finely worked."], "510 4": ["Acta conciliorum et epistolae decretales, ac constitutiones summorum pontificum, 11 vols. (Parisiis: Ex typographia regia, 1714-15), 7: col. 386-395."], "260": ["[Paris?,|cbetween 1250 and 1300]"], "099": ["Robbins MS 100"], "246 2": ["|iSecundo folio: |ase sancti sunt"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["During the 15th century the first part of the book, containing the Decretales, was given to Henricus, vicar of Bremen (fol. 498r: \"Hec decretales deditur domino Henrico de [..] vicario in ecclesia Bremensis\"). After the second section was added, another possible owner was one Andreas, whose mark appears on the back pastedown: \"Andreas Duulwal anno domini 1540;\" the same hand has written \"Ama Deum p[..] omnibus,\" \"Quicquid agis prudenter agas,\" \"Deus facit s[..] oriri super bonos et malos,\" and other exhortations, immediately preceding or following the owner's name. Either before or after Andreas wrote his name, but certainly after the two sections were bound together, the book belonged to the Premonstratensian Abbey of SS. Mary, Potentinus, Felicius and Simplicianus in Steinfeld, formerly in the diocese of Cologne, now Aachen (fol. 1r: \"Liber ecclesie Sancte dei genitricis marie sanctique Potentini in Steynuelt;\" shelfmark: \"Liber 278 N 24\"). On fol. 514v, a rubbed ownership note written by a 16th century hand (now legible only with the ultraviolet lamp) reads: \"Liber Donnielli (?) Hermanni de Rinizenii studentii Colon[iae?]\". At some point in more recent times the manuscript was part of the collection of Rolf G\u00fcnther, his no. 77 (On inside front cover, a bookplate depicts a Dutch windmill, with the name: \"Sammlung. Rolf Gunther\" and then \"N. 77\" added in pen.)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i + 514; 1\u00b2\u2070 2-4\u00b2\u2074 5\u00b2\u2070 6\u00b2\u2074 7\u00b2\u2070 8\u00b2\u2074 9\u00b9\u2076 10\u00b2\u2070 11-12\u00b2\u2074 13\u00b2\u2070 14-22\u00b2\u2074 23\u00b2\u207b\u00b9 24\u00b9\u2078\u207b\u00b2. No contemporary foliation is provided. Modern foliation (20th century) in pencil, Arabic numerals, on the right upper corner. Catchwords in the right side of the bottom margins, on verso.", "Layout: The text is written in two columns; the marginal gloss surrounds the text, and it is written in up to 70 lines for each column. Running titles in the upper margins. Ruled in ink and lead.", "Script: Fol. 1r-498r: written in a textualis libraria script close to the \"littera Parisiensis\"; the text is apparently copied by one hand and the gloss is copied by a different but contemporary hand. Fol. 499r-511v, written in a textualis libraria script.", "Decoration: Sections headings with portraits at the beginning of each book of the Decretales: the colors used are blue, different shades of pink, red, green. Fol. 1r, a 6-line illuminated initials shows the pope sitting on his throne, blessing; fol. 1v, a large 26-line initial depicts Christ on his throne blessing, and a dog with wings as a \"drolerie\"; fol. 126v, a 10-line initial shows the pope, sitting, while blessing two friars who stand in front of him; fol. 242r, a 8-line initial shows three friars beside an altar; fol. 356v, a 7-line initial shows a priest marrying a man and woman; fol. 392r, a 7-line initial shows the pope blessing two friars dressed in a brown robe. Many alternating red and blue 3-line pen flourishing initials throughout the text. Alternating red and blue paragraph marks. Red rubrics.", "Binding: Blind tooled leather (fleurs-de-lys, fleurets) over wooden boards; two metal clasps; six raised bands on spine. Kept in a box with the following title on spine: \"Gregorius IX Decretales MS saec. XIII.\"", "Origin: Written in France, possibly Paris, during the second half of the 13th century. Fol. 499-514 were possibly added later, and written in Germany.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 100."], "300": ["514 leaves :|bparchment :|c210 x 130 (190 x 125) mm bound to 215 x 140 mm."], "505 8": ["Fol. 499r-511v: \"[Innocentius IV, Constitutiones cum glossa Bernardi Compostellani]. Innocencius episcopus servus servorum Dei dilectis doctoribus et scolaribus...Cum nuper in consilio Lugduniense quasdam constituciones...distinguimus inferi facientes: huiusmodi vero diffinita sunt hec.\"", "Fol. 512v: \"[Sermon] Dicite filie Syon (Mt 21,5). In verbis istis tria consideranda sunt; primum quid per filiam...quem peractum invenit super omnibus bo[...] su[..] const[...].\"", "Fol. 512v: \"[Nicolaus de Budejovice, Postilla epistolarum de tempore] Hora est iam nos (Rm 13, 11). Apostolus monet nos ad tria; primum est ad surgendum...ut luminaria.\" [author and title from IN PRINCIPIO database]", "Fol. 512v: \"[Sermon] Respicite et levate capita vestra (Lc 21,28). Hic tria sunt consideranda; primum quid debemus respicere...animam ad Dominum pure contemplandum.\"", "Fol. 512v: \"[Sermon] Fili quid fecisti nobis (Lc 2,48). Quinque sunt hic notanda...a Maria Magdalena in desco p[...].\"", "Fol. 512v: \"[Sermon] Nuptie facte sunt (Ioh 2,4). Primum quid per istas nuptias...societatis angelorum, visionis Dei.\""], "100 0": ["Gregory IX,|cPope,|dca. 1170-1241."], "852 8": ["CUL|bRBCAG|hRobbins MS 100|xCIN=JKN"], "700 0": ["Bernard,|cof Compostella,|d-1267.", "Nicolaus, de Budejovice."], "008": ["060829q12501300fr ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "546": ["Latin."], "700 1": ["Bottoni, Bernardo,|d-1266.", "G\u00fcnther, Rolf.|4asn|4fmo|5CUL."], "505 0": ["1. Fol. 1r-495v: \"[text] Gregorius episcopus servus servorum Dei dilectis filiis doctoribus et scholaribus universis Parisius (sic) commorantibus salutem et apostolicam benedictionem. Rex pacificus pia miseratione disposuit...consuetudine alienuum ut pro spiritualibus facere quis homagium compellatur.\"; fol. 496r-498r: Tabula titulorum Decretalium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=62;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS115": {"001": ["06-B4216"], "245 10": ["Summa super titulis Decretalium."], "505 0": ["1. Fol. 1r-31v: \"[rubr.] Incipit summa Gaufredi super titulis Decretalium. [Libe]r primus. [text] Glosarium diversitas intelligenciam textus non nunquam obtenebrat...cum pena assumpti non agitur quia transit in rem iudicatam ut superius dictum est et G. e. ti. li. [rubr.] Explicit liber primus.\"; 2. fol. 31v-54r: \"[rubr.] Incipit liber secundus de iudiciis. [text] Explicitis quibusdam iudiciorum preparatoriis...vel solet plus timeri et cetera ut xxiii di. quamquam XL d. quis nesciat. [rubr.] Explicit liber secundus.\"; 3. fol. 54r-75r: \"[rubr.] Incipit tercius. De vita et honestate clericorum. [text] Finito tractatu iudiciorum...constitucio super specula fit penalis et ad alios quam exprimat extendi non debet. [rubr.] Explicit liber tercius.\"; 4. fol. 75r-88r: \"[rubr.] Incipit liber quartus de sponsalibus et matrimonio. [text] Postquam de his que ad clericos pertinent superius satis tractauimus...de divorcio vel uxores secundum iura canonica non tenet.[rubr.] Explicit quartus\"; 5. fol. 88r-113r: \"[rubr.] Incipit liber quintus de accusacionibus inquisicionibus et denunciacionibus. [text] Proxime tractavimus de accusacione...quod non omnes qui summam habituri sunt habent apparatum et propterea malui reperi quam deesse. [rubr.] Explicit hec summa. Pro Summe summo Regi sit gloria Summo.\""], "520": ["This manuscript contains the Summa super titulis Decretalium compiled by the Italian law scholar Goffredo da Trani, and it must have been written very close to the date of the compilation. Considering the handwriting and the different ownership notes, we can assume that this manuscript made some peregrinations all across Europe."], "510 4": ["Gottofredo da Trano, Summa perutilis et valde necessaria domini Goffredi de Trano super titulis decretalium nouissime cum Repertorio et numeris principalium et emergentium questionum (Lugduni: In edibus Magistri Ioannis moytin alias decambray...Anno a Virginis partu 1519 die secunda mensis iunij; facsimile reprint, Berlin: Scientia Verlag, 1968)", "Schadt, Hermann, Die Darstellungen der Arbores Consanguinitatis und der Arbores Affinitatis: Bildschemata in juristischen Handschriften (T\u00fcbingen: Verlag Ernst Wasmuth, 1982)"], "100 0": ["Goffredo,|cda Trani,|dd. 1245."], "852 8": ["CUL|bRBCAG|hRobbins MS 115|xCIN=JKN"], "246 2": ["|iSecundo foilo: |apropter ius aut"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060830q12401260fr ||||||||||||00|||lat|d"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["|3Original: |a117 leaves :|bparchment ;|c283 x 175 (230 x 140 ) mm bound to 290 x 180 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-88) and positive (Robbins MS 115)"], "561": ["Notes on back pastedown, in a 15th-century handwriting: \"Super omnia bona,\" and \"Pamphilus. Credo quod interdum multis mendacia prosunt. Et quoque nocet omnia vera loqui.\" Further down the page, in a different hand there is an owner's mark, giving a date in the late fifteenth century, the owner's name (a member of the Venetian family of Contarini), as well as the circumstances under which the book became his, which cost him 12 ducats; based on the ortography of several different words in the text, as well as the owner's name, it can be inferred that at this stage in its history the book was in Venice or its vicinity: \"1471 adi primo zener[o]. Que[s]ta Summa de gofredo sora tuta la Decretal zoe in raxon chanonicha si xe de mi Francisco Contarini fiol de misser Agustin la qual me vene duchati dozoe f. 12 s. 8.y Another group of notes on fol. 117v, in a third hand, written with a stylus; these notes seem to include an English or German name (\"...iudex Johannes de Wekydd (?)\")."], "500": ["Ms. codex.", "Title from opening rubric, fol. 1r.", "Collation: Parchment, fol. ii (modern paper) + 117; 1\u00b9\u2070 2- 3\u2078 4\u00b9\u00b2 5-9\u2078 1\u00b9\u2070\u207b\u00b9 11-12\u00b9\u00b2 13\u2078\u207b\u00b2. Fol. 1-86, catchwords in the middle of the bottom margin; fol. 88-113, catchwords in the right corner of the bottom margin, on verso. Some leaves have what appear to be a binder's stylus mark: the folios in each quire are marked with different kinds of symbols. A later foliation in Arabic numerals is visible in the right upper corner.", "Layout: Written in two columns, 65 lines for each column. Running titles in the upper margins. Ruled in lead; prickings still visible in the upper and bottom margins.", "Script: Written in a professional textualis libraria script, below top line, by two different scribes: fol. 1r- 86v, first scribe; fol. 88r-113r, second scribe.", "Decoration: Fol. 1r, four 4-line red and blue pen flourishing initials. Fol. 88r, a 7-line blue and red pen flourishing initial. Many 3 and 2-line penworked initials throughout. Many alternating red and blue paragraphs marks throughout. Red rubrics. Beautifully painted \"Arbor consanguineitatis\" on fol. 81r, in red and blue, with infills in the blank space. Another related diagram on fol. 82r, but unfinished.", "Binding: Brown leather over wooden boards. The manuscript was rebound by Philip Dusel in 1985: gatherings resewn using the original pinholes; the entire original back cover was preserved; a matching backstrip and front cover have been added, with four clasps of the type that migh have been on the original binding, to judge by the presence of small nail-holes.", "Origin: Possibly written in Southern France, between 1240 and 1260.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 115."], "700 1": ["Contarini, Francesco,|d1421?-1460?.|4asn|4fmo|5CUL.", "Dusel, Philip."], "090 8": ["Robbins MS 115"], "260": ["[France?,|cbetween 1240 and 1260]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=72;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS38": {"001": ["ocn248082651"], "245 10": ["Declarationes sacrae Congregationis illustrissimorum cardinalium super Concilium Tridentinum in eiusdem Concilii decretis."], "040": ["BOL|eamremm|cBOL"], "520": ["The first section of the Declarationes (article 1.a) includes additions authored by Cardinal Antonio Carafa (1538-1591), who was a member of the Sacra Congregatio Cardinalium Concilii Tridentini Interpretum. The manuscript also includes, on fol. 12v-14r, a consilium by the Roman jurist Orazio Mandosio (d. 1594). The scribe has also copied, on fol. 259r, an annotation by Terenzio Alciati (1570-1651), member of the Commission for the revision of the Breviarium romanum. One folio prior to fol. 1, as well as fols. 10, 158, 159, and several others after fol. 261 are torn out."], "300": ["|3Original:|a261 leaves :|bpaper ;|c291 x 201 (208 x 104) mm bound to 298 x 218 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-38) and positive (Robbins MS 38)"], "110 2": ["Catholic Church.|bCongregatio Concilii"], "260": ["Italy,|c[between 1600 and 1625]"], "099": ["Robbins MS 38"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once the property of Pietro Faiano (fol. 8v : \"Pietro Faiiano son patrone di questo\" fol. 20v: \"Io Pietro Faiano\") and Antonio Faiano (fol. 8v: \"Io Ant. Faiano;\" fol. 176v: \"Antonio Faiano son patrone di ques\"). One of them has copied parts of a madrigal in the margins of fol. 1r (\"Piedi di camminare ed camminati/bocca di cantare ed cantati,\" etc.) and 2r (\"Senci che mora Io voglio morire/prima che mora fa me no piacire,\" etc.)."], "500": ["Ms. codex.", "Title from title page (fol. 1r).", "Collation: Paper, fol. i (modern paper) + 261 + 1 (modern paper); collation indiscernable due to tightness of binding.", "Layout: Writte in 26 long lines.", "Script: Two different scripts, presumably by the same hand : the former (fols. 1r-2r) imitates the humanistic script of the earlier part of the sixteenth century; the latter (fols. 2r-261v) is a calligraphic hand of the early seventeenth century. Contemporary corrections, titles and annotations in the margins in the former script.", "Binding: 14th century vellum (title on front cover in a fourteenth-century hand: \"Liber bonorum...\" several lines on back cover written in the same hand). Title on spine: \"Declarationes patrum interpretum Concilii Tridentini,\" in a seventeenth-century hand.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 38."], "035": ["(OCoLC)248082651"], "611 20": ["Council of Trent|d(1545-1563)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=27;fullview=yes"], "008": ["080911q16001625it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "546": ["Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080911035711.0"], "505 0": ["Fol. 1r-217r: \"Declarationes sacrae Congregationis Illustrissimorum Cardinalium super Concilium Tridentinum in eiusdem Concilii decretis\" [Sessio 4-Sessio 25 cap. 19] -- fol. 217v-250v: \"Declarationes et decisiones Illustrissimorum et Reverendorum D. D. Patrum Sacri Concilii Tridentini Interpretum Incipientis a 21 Martii 1591 usque ad diem 3 Junii 1601\" -- fol. 251r-261v: \"Declarationes Sacrae Congregationis Ilustrissimorum Cardinalium super Concilium Tridentinum in eiusdem Concilii decretis\" [continuatio]."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS34": {"001": ["ocn456463047"], "260": ["Italy ,|c[between 1550 and 1599]"], "040": ["BOL|eamremm|cBOL"], "852": ["BOL|bRBCAG|xCIN=JKN"], "510 4": ["Phillipps, T. Cat. ms.|c5982."], "099": ["Robbins MS 34"], "245 00": ["A transcription of papal conclave reports, letters, and other writings about conclaves from Clement V to Gregory XIII."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (his no. 5982) and of Frederick North, Earl of Guilford (his bookplate on front on front pastedown (no. 5982)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Script: Written in a rushed cursive hand.", "Binding: Vellum over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 34."], "600 00": ["Clement|bV,|cPope,|dca. 1260-1314.", "Paul|bII,|cPope,|d1417-1471.", "Pius|bII,|cPope,|d1405-1464.", "Julius|bII,|cPope,|d1443-1513.", "Clement|bVII,|cPope,|d1478-1534.", "Paul|bIII,|cPope,|d1468-1549.", "Pius|bIV,|cPope,|d1499-1565.", "Gregory|bXIII,|cPope,|d1502-1585.", "Charles Borromeo,|cSaint,|d1538-1584."], "035": ["(OCoLC)456463047"], "505 0": ["Fol. 1r-15v: \"Conclave di Clemente V\" -- fol. 16r-45v: \"Conclave in quo fuit creatus Paulus secundus\" -- fol. 46r -67v: \"Pii secundi Pontificis Maximi ab eodem inscriptum conclave\" -- fol. 70r-109v: \"Alexandri VI Pontificis Maximi obitus et Pii 3 conclave ac creatio auctore Johanne Burchardo caeremoniandi magistro\" -- fol. 110r-151r: \"Pii Papae III obitus et Julii secondi creatio et conclave\" -- fol. 152r-287r: \"Conclave in quo creatus fuit Clemens Papa VII\" -- fol. 288r-308r: Conclave di Paolo III per la morte di Clemente Papa settimo\" -- fol. 309r-372r: \"Conclave in quo Pius quartus Mediolanensis vocatus est ad apicem aplatus Carolo Borromeo Cardinali amplissimo Antonius Guidus S. P. D.\" -- fol. 373r-381r: \"Lettere scritte a Papa Gregorio XIII dal serenissimo Re di Navara e dal Prencipe di Cond\u00e9\" -- fol. 382r-413v: \"Acta in pontificatus initio Gregorii XIII\" -- fol. 414r-461v: \"Discorso intorno al conclave di quanto si deve fare in sedia vacante\" -- fol. 461r-530r: \"Il Conclave di Felice Gualterio\" -- fol. 530v-549v: \"Consideratione intorno all'ultima scrittura venuta fuori circa quello che si deve fare in sede vacante.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=120;fullview=yes"], "700 0": ["Henry|bIV,|cKing of France,|d1553-1610."], "008": ["091014q15501599it 000 0 ita d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Pamela Diaz, September 2009."], "546": ["Italian and Latin."], "003": ["OCoLC"], "700 1": ["Burchard, Johann,|dd. 1506.", "Cond\u00e9, Henri I de Bourbon,|cprince de,|d1552-1588.", "Guidus, Antonius,|dd. 1604.", "Gualtiero, Felice.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "005": ["20091014033114.0"], "300": ["|3Original:|a550 leaves :|bpaper ;|c255 x 190 mm bound to 270 x 205 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-7) and positive (Robbins MS 34)"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS166": {"001": ["ocn232158053"], "245 10": ["Lettere della Segretaria di Stato d'Innocentio Xmo a Mons[ignor] Caetano Arci[vescov]o di Rhodi nel tempo della sua nuntiatura di Spagna"], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["A collection of 191 letters, almost all signed by either Cardinal Camillo Astalli-Pamphili or Cardinal Fabio Chigi (later Pope Alexander VII) with one printed leaf (in two copies), \"Innocentius PP. X. ad futuram rei memoriam,\" 1663. Seals and addresses are present, indicating that these letters were actually sent. Several of the 42 letters from Cardinal Chigi (all but one signed) concern Carlo Massimo's retinue in Madrid. (Carlo Massimo was later the patron of Velazquez, Poussin, and other artists.) The 142 letters from Cardinal Astalli-Pamphili (all but 4 signed) pertain to many aspects of Innocent X's policy toward Spain, notably attitudes towards Cardinal Sandoval (e.g., nos. 6 and 136), church scandals in Milan (no. 33), the Inquisition (no. 40), and control of Naples (nos. 133 and 100). The collection includes a letter to Pamphili about Neapolitan corsairs (no. 138), one to Caetano signed by Cardinal Barberini (no. 25), and 3 letters from Innocent X, one of which is to King Philip of Spain. There are also two accounts of legal processes against clerics (nos. 109 and 110)."], "510 4": ["Phillipps, T. Cat. ms.|c7570."], "260": ["Italy,|cbetween 1652 and 1654"], "099": ["Robbins MS 166"], "100 1": ["Astalli-Pamphili, Camillo"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Colonna library stamp on fol. 1r and 2r. Was once in the colleciton of Sir Thomas Phillips (his no. 7570), as well as in the library of Fredrick North, Earl of Guilford."], "500": ["Ms. codex.", "Title from title page (fol. 3r).", "Collation: Paper (similar but not identical to Briquet, Ancre 491) fol. ii + 407 + fol. ii; most of the letters are single folios, bound individually into the manuscript.", "Binding: Conemporary calf (rebacked).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 166."], "600 00": ["Innocent|bX,|cPope,|d1574-1655"], "300": ["|3Original:|a407 leaves :|bpaper ;|c267 x 194 ( 210 x 167) mm bound to 280 x 205 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-22) and positive (Robbins MS 166)"], "700 0": ["Alexander|bVII,|cPope,|d1599-1667"], "008": ["080617i16521654it 000 0 ita d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, June 2008"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "546": ["In Italian."], "003": ["OCoLC"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "005": ["20080618115555.0"], "035": ["(OCoLC)232158053"], "LEADER": ["00000ntc 2200000Ia 4500"]}, "RobbinsMS4": {"090": ["Robbins MS 4"], "001": ["06-B2761"], "260": ["England,|c[between 1340 and 1375]"], "505 8": ["Fol. 90ra-106va: Secreta secretorum; fol. 90ra-b: \"[prologue] Domino suo excellentissimo in cultu Christiane religionis strenuissimo Guydoni vere de Valencia civitatis Tripolis glorioso pontifici minimus Philippus suorum minimum clericorum...cum luna ceteris est lucidior\"; fol. 90va-106va: \"[text] Deus omnipotens custodiat regem nostrum ad gloriam...Explicit liber Aristoteli de Secreta secretorum sive de regimine principum vel regum vel dominorum et aliorum hominum completus et tractatus de signis et moribus naturalibus hominum ad regem magnificum Alexandrum qui donatus fuit totius orbis dictusque monarcha in septemtrione.\"", "Fol. 106vb-111rb: \"[Canones concilii legatini, 1237: text] Incipiunt constituciones Ottonis legati et celebravit concilium apud Londonias...et minus intelligentibus exponatur. Expliciunt constituciones domini Ottonis\"; fol. 111va-123ra: \"[Canones concilii legatini, 1268: text] Incipiunt constituciones Octoboni nuper in Anglia legati Octobonus miseracione divina sancti Adriani diaconus cardinalis sedis apostolice legatus ad perpetuam rei memoriam...quod mandamus circa monachos constitutos in sacertocio qui non frequenter celebrent obs[----]\"; fol. 123rb-127rb: \"[Constitutiones concilii Oxoniensis, 1222: text] Concilium Oxoniense secundum a domino Staphano archiepiscopo Cantuarie Auctoritate Dei patris omnipotentis et Beatae Virginis et omnium sanctorum et presentis concilii excommunicamus...Excommunicaciones autem in hoc concilio promulgate singulis annis in episcopalibus sinodis et quater in anno parochialibus ecclesiis uterentur. Expliciunt constituciones Oxonienses\"; fol. 127rb-130rb: \"[Canones concilii Lambethensis, 1261: text] Concilium editum a Bonefacio Cantuarie archiepiscopo apud Lambeth cum Ecclesia anglicana non contempnenda iura divina et statuta canonica...scripta remedia sacro approbante concilio [providimus?] adversis [---] apponenda In nomine sancte et individue trinitatis patris et filii et spiritui sancti Amen Expliciunt constituciones domini Benefacii archiepiscopi Cantuarie\"; fol. 30va-135va: \"[Canones concilii Lambethensis, 1261: text] Universis sancte matris ecclesie filiis per Cantuariensem provinciam constitutis Bonefacius miseracione archiepiscopus Cantuarie tocius Anglie primas...Egidius Saresbir' episcopi una cum aliis presentibus litteris sigilla nostra duximus apponenda Expliciunt constituciones domini Bonefacii episcopi Cantuarie\"; fol. 135va-142rb: \"[Canones concilii Lambethensis, 1281: text] Incipiunt constituciones domini Johannis de Peccham quondam Cantuarie episcopi Ad exordio nascentis ecclesie christiane orthodoxi patres retroactis temporibus orthodoxorum laqueis...Anno regni illustrissimi domini nostri Edwardi regis Anglie nono et consecracionis nostre tercio Expliciunt constituciones domini Johannis archiepiscopi Cantuariensis composite apud Lambethe\"; fol. 142va-144vb: \"[Canones concilii Redingensis, 1279: text] Incipiunt constituciones apud Radingis Audites fratres conscripti constituciones istius tenorem novistis eciam canones sanctorum patrum...omni sexta feria in pane et aqua ieiunare per inobedienciam nisi infirmitas impediat donec in sequenti capitulo ipsum fecerit recitari Expliciunt constituciones apud Radynd'\"; fol. 145vb-146vb: \"[Canones concilii Londoniensis, 1328: text] Incipiunt constituciones Simonis archiepiscopi elari oportet pro domino deo suo qui non est de sola sua predicione sunt dampnandi...Expliciunt constituciones Symonis archiepiscopi Cant' [edite in concilia sancti Pauli london' in fine mensi Januarij anno domini Milesimo cccxxviii add. man. sec.]\"; fol. 147ra-147vb: \"[Canones concilii Londoniensis, 1342: text] [illegible] ... sacrosanctam ecclesiam...[illegible].\""], "520": ["William of Pagula's compendium for parish priests in 3 parts (fol. 1ra-89vb); Secreta secretorum by pseudo- Aristotle (a translation of the Arabic Kitab sirr al-asrar [Book of the science of government, on the good ordering of statecraft] that takes the form of a letter supposedly written by Aristotole) (fol. 90ra-106va); decrees of various Councils in England spanning the time period of 1222 (Council of Oxford) to 1342 (Council of London). Corrections and marginal notes in the Secreta secretorum in black ink (the same hand added chapter headings missed by the original copyist). Fol. 1r is very faded and barely legible; bottom of fol. 27 torn but repaired; fol. 67 mended in 2 places."], "530": ["Selected digital images available in Digital Scriptorium."], "852 8": ["CUL|bRBCAG|hRobbins MS 4|xCIN=JKN"], "700 0": ["William,|cof Pagula,|dapproximately 1290-1332."], "008": ["060612q13401375enk||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Oculus sacerdotis ;|bSecreta secretorum ; [Canons and constitutions of English Councils, 1222-1342]"], "546": ["Latin."], "300": ["|3Original: |a147 leaves :|bparchment ;|c250 x 170 (210 x 140) mm bound to 270 x 198 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-13) and positive (Robbins MS 4)"], "561": ["Once part of the library of Sir John Cope, Bramshill House, Hampshire, with his manuscript no. 14 (fol. 2r)."], "500": ["Ms. codex.", "Titles from explicits and incipits (fol. 24vb, 51rb, 89vb, 106va, 106vb, 111va, 127rb, 130rb, 135va, 142rb, 142va, 145vb).", "Collation: Parchment, fol. iii (modern paper) + 147 + iii (modern paper); 1-10\u2078 11\u2079 12-16\u2078 17-18\u2079; catchwords at the end of each quire.", "Layout: 2 columns of 56 lines; ruled in drypoint; prickings visible.", "Script: Written in Anglicana script by 2 hands: fol. 1-89 by the first hand and fol. 90-147 by the second hand.", "Decoration: Paragraph marks, initials and capital letters in red; red underlining especially in part 3 of the Oculus sacerdotis.", "Binding: 20th century brown leather; book repaired by sewing quires onto onglets de papier; two clasps on fore edge; gold-stamped title on spine reads \"William of Pagula Oculus sacerdotis.\"", "Origin: Copied in England not before 1342 (the date of the last section).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 4.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), MS Berkeley, Law Library 46W.716 oc."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "505 0": ["Fol. 1ra-89vb: Secreta secretorum; fol. 1ra-24vb: \"[text] (Cum ecclesie quibus perficiuntur)...et Job xxix qui humilitatus fuerit erit in gloria ad quam non producat dominus Ihesu Christo amen. Explicit summa que vocatur prima pars Oculi sacerdotum\"; fol. 25ra-51rb: \"[text] Multi sunt sacerdotes et pauci sunt sacerdotes. Multi sunt nomine pauci in opere...quam cum probatus fuerit accipiet coronam vite ad quem nos producat suum fine vivit et regnat Amen. Explicit summa que vocatur dextra pars Oculi sacerdotis\"; fol. 51rb-89vb: \"[text] Incipit summa que vocatur sinistra pars Oculi sacerdotis Ignorancia sacerdotum populum decipit...semper cum domino erimus in presenti vita per gloriam ad quam nos producat dominus Ihesu Christo Amen. Explicit summa que vocatur Sinistra pars oculi.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=100;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS2": {"001": ["06-B2050"], "245 10": ["[Carthusian liturgical works]"], "505 0": ["Fol. 1r-6v: \"[Calendarium] Januarius habet dies xxxi...xiiii a ii Silvestri pape et confessori\" ; fol. 7r- 85v: \"[Breviarium] Feria iiam ad primam antiphona. Servite domino psalmus David beatus vir qui non abiit in consilio impiorum...Qui reminiscimi (sic) domini ne taceatis et ne detis silentium ei donec stabilitat et donec ponat Ihesum Christum laudem in terra\" ; fol. 85v-146r: \"[Hymnarium] Incipiunt hymni per totum annum tam pro festis quam pro ferialibus diebus et primo in adventu Domini...Sacerdos in eternum Christus dominus secundum ordinem Melchisedech panem et vinum obtulit. Seculorum. Alleluya alleluya alleluya Seculorum.\""], "520": ["Liturgical manuscript written for one of the Carthusian houses in France. The calendar includes several Carthusian feasts, among which those of Hugh, Bishop of Grenoble (canonized in 1134; feast on 1 April) and Hugh, Bishop of Lincoln (the first Carthusian to be canonized in 1220; feast on 17 November); the commemoration of the dead within the order (\"defunctorum ordinis nostri\") is recorded on 9 November. Three other significant entries are those for the Queen of France (5 March), the Cardinal Bishop of P\u00e9rigueux in Dordogne (17 January), and Bishop Amblardus de Intermontibus (29 April), all of whom are commemorated with a tricenarium. The chants pertain to the Proper of the Time (Advent to Corpus Christi) and to the Proper of the Saints (section incomplete); the Common of the Saints is missing. The entire manuscript, including the calendar, was copied after 1378 or 1382 (introduction of the feast of St. Anne, mother of the Virgin Mary, celebrated on 26 July); other late medieval feasts included are those of Thomas \u00e0 Becket (canonized in 1173; feast on 29 December); Francis of Assissi (canonized in 1228; feast on 4 October); St. Dominic (canonized in 1234; feast on 5 August); Peter of Verona (canonized in 1253; feast on 29 April); and Thomas Aquinas (canonized in 1323; feast on 17 March). The book was still in use after 1461 (canonization of St. Catherine of Siena, whose feast was added in a second hand for 6 May), but not since shortly before 1514, as the feast of St. Bruno, the founder of the Carthusian order, canonized that year, is not recorded."], "530": ["Selected digital images available in Digital Scriptorium."], "110 2": ["Carthusians."], "852 8": ["CUL|bRBCAG|hRobbins MS 2|xCIN=JKN"], "008": ["060504q13751399fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning these items should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, May 2006."], "300": ["146 leaves :|bparchment ;|c338 x 234 (249 x 172) mm bound to 347 x 237 mm."], "561": ["Manuscript was part of the original collection donated by Lloyd M. Robbins."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. ii (parchment) + 146 + ii (parchment); 1\u2076 2-7\u00b9\u2070 8-17\u2078 (+ 1 leaf at end); catchwords at the end of each quire exept for quires 1, 11, 14, 15 and 16; two systems of signatures intermittently visible (small roman numerals and tall, thin strokes), mostly cropped.", "Layout: Fol. 1r-6v: 31 lines per page; fol. 7r-85v: 18 lines per page; fol. 86r-146v: musical settings in black, square notation, 6 four- or five-line staves per page.", "Script: Written in Gothic script by several hands.", "Decoration: Initals in red, purple and black ink, some filled with drawings. Capital letters in red, purple and green ink.", "Music: Second and third sections of manuscript include antiphons and hymns notated in black square notation on four- and five-line staves; noteshapes in black ink, staves in red ink.", "Binding: Stamped leather over wooden boards with fillets, fleurons and flowers, spine torn. Two metal plates on the back for clasps (lacking); end of straps nailed to front cover; leather tabs mark sections in bookblock, a few lacking. Front and back flyleaves and pastedowns are parchment from a missal.", "Origin: The manuscript was written for one of the Carthusian houses in France.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 2."], "090 8": ["Robbins MS 2"], "260": ["[France,|cbetween 1375 and 1399]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=98;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS172": {"001": ["06-B3858"], "245 10": ["Lectura super usibus feudorum ;|bLiber nonus."], "505 0": ["Fol. 1r-181v: \"Intellectum tibi dabo...Ait Dominus omnipotens per os prophete in libro Phalmorum (sic): est ergo...Domini martirius ipse est rex glorie amen. [rubr.] Explicit subtilis ac perutilis lectura super usibus feudorum domini Baldi de Perusio utriusque iuris doctoris excellentissimi et in inclita civitate Papie publicata anno Domini millesimo trigentesimo nonagesimo tertio...hec sufficiant amen.\""], "505 8": ["Fol. 182r-207v: \"[rubr.] Incipit liber nonus. [text] Iste liber multum est malus quia primo ponit de accusatoribus...assigna ut ipsam. Iacobus Buttrigalis.\""], "520": ["This is a massive treatise on Medieval civil law. Ubaldo degli Ubaldi was a doctor of civil law in Perugia (Italy) his hometown. His \"Liber feudorum\" contained in this manuscript is followed by a brief account of the author's life, with an obituary note at the end. On fol. 182r begins another unidentified text about civil law: the author was possibly Jacopo Bottrigari, as the colophon says, but no other evidence was found."], "300": ["|3Original: |a270 leaves: |bpaper; |c395 x 285 (280 x 175) mm bound to 400 x 290 mm.", "|3Copy: |a1 microfilm reel :|bonly positive (Robbins MS 172)."], "852 8": ["CUL|bRBCAG|hRobbins MS 172|xCIN=JKL"], "008": ["060814q14011450fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "100 1": ["Ubaldi, Baldo degli,|d1327?-1400."], "561": ["On fol. 181v, a partially rubbed ownership note by a 15th century hand reads: \"Iste Baldus est Iohannis [...] in iure civili et de parochia monasterii Claromon[tanae] dioc[esis]\"; on fol. 207, the same ownership, but less detailed, is repeated: \"Iste liber est Iohannis\". On inside front cover, written in pencil by a 20th century hand: \"MS 98\", a shelfmark by a former owner."], "500": ["Ms. codex.", "Fol. 1r-181v, title from the closing rubric; fol. 182r- 207v, title from the opening rubric.", "Collation: Paper, fol. i + 207; 1\u00b9\u00b2 (lacks first folio) 2- 13\u00b9\u00b2 14\u00b9\u2074 15\u00b9\u00b2 16\u00b9\u2074. Watermarks: crossed keys, very close to Briquet 3863; unicorn, close to Briquet 9969; a 'croissant' not in Briquet. Most quires have a quire signature on the bottom margin on the left. Catchwords in the middle of the bottom margin or in the right side of the bottom margin, sometimes framed in black.", "Layout: Written in two columns, mostly on 42-50 lines for each column. Frame-ruled in lead and dry point.", "Script: Written in a bastarda cursive hand, below top line, by three scribes contemporary to each other: the first one copied fol. 1r-67; the second one copied fol. 67v-181v; the third one copied fol. 182r-207v.", "Decoration: On fol. 146, a pen drawing shows a crowned king (the King of France) holding the 'fleur de lys'. On fol. 1r, a 10-lines pen flourishing initial red, blue and violet. Many 6-line penworked initials, divided red and blue with elaborate penworks in both colours, used for the chapters headings (fol. 8r, 16v, 174r, 182r). Many 3-line black penworked initials. Alternated red and blue paragraph signs throughout the text. Some 'grotesques' and cadels including faces and other 'droleries'.", "Binding: Recently (1986) bound in full, blind tooled goatskin over wooden boards in the French 15th century style by the binder Philip Dusel (see inside back cover, a note written in pencil by a 20th century hand: \"Bound by Phil Dusel August 1986\"). Back with four bands. It was tooled with specially made punches, which were cut from rubbings taken from a 15th century French binding.", "Origin: Written in Central France, possibly Clermont- Ferrand, during the first half of the 15th century. On fol. 181v the colophon provided by the scribe reads: \"Tu qui succisti de Virgine virgineum lac, regni celestis scriptorem participem fac. Michael\". No \"Michael\" who would fit is listed in the Colophons by the Benedectins du Bouveret.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 172."], "700 1": ["Bottrigari, Jacopo,|d1274-1347.", "Dusel, Philip,|dca. 1986.|4asn|4bnd."], "090 8": ["Robbins MS 172"], "260": ["[Central France,|cbetween 1401 and 1450]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=92;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS203": {"001": ["ocn244450510"], "260": ["Italy,|c[between 1625 and 1675]"], "040": ["BOL|eamremm|cBOL"], "520": ["Laws regarding heretics and how to deal with them."], "300": ["50 leaves :|bpaper ;|c222 x 162 (180 x 125) mm bound to 233 x 175 mm."], "510 4": ["Phillips, T. Cat ms.|c6105."], "008": ["080826q16251675it 000 0 ita d"], "099": ["Robbins MS 203"], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, August 2008."], "003": ["OCoLC"], "245 00": ["Prattica per proceder nelle cause del s[an]to offitio...o sono d'eresia o di sospitione d'essa: Delinquenti, o siano eretici o siano sospetti, si considerano in doi modi, il p[rim]o come prevenuto in giuditio da inditii sufficienti, il [secondo] come sponte comparenti."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 6105), as well as in the collection of Fredrick North, Earl of Guilford (554/13)."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper, fol. ii (modern paper) + 50; 1\u00b9\u2074 2\u00b9\u2076 3\u00b9\u2074 (+1) 4\u2074.", "Layout: Written in 19 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: When originally acquired manuscript was bound in limp vellum with remains of purple silk fore-edge ties, later covered with a leather spine and sprinkled paper sides. Now bound in stiff vellum. Original binding in manuscript file along with full conservation treatment report.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 203."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5BOL."], "005": ["20080826054352.0"], "505 0": ["Fol. 1r-48v: \"[text] Capitolo primo: Delli heretici prevenuti. Alcuni Eretici si chiamano positivi, et altri negativi...perche per poter esercitare la loro libidine con le loro figliole spirituali senza trovar resistenza li danno a credere che gl'atti e tutti carnali non siano peccati ma atti meritorii di mortificatione. Il Fine\" ; fol. 49rv: Table of contents."], "035": ["(OCoLC)244450510"], "546": ["Italian."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS12": {"001": ["ocn244493817"], "245 10": ["Trattato de' rimedi contro le scomuniche invalide e proibizioni de libri che si decretano in Roma /|cScritto da Pietro Giannone giurisconsulto ed avvocato Napoletano coll'occasione dell'invalida censura contro di lui fulminata dal Vicario di Napoli per aver fatto quivi imprimere i libri della storia civile di quel regno senza sua licenza e della proibizione de med[esim]i decretata da Roma il d\u00ec p[ri]mo luglio 1723..."], "040": ["BOL|eamremm|cBOL"], "505 8": ["2. Fol. 229r-298v: \"[title] Professione di fede scritta al Padre Giuseppe Sanfelice...[text] Molto Reverendo Padre. Chi avrebbe potuto resistere, Padre Santo a' vostri pungentissmi coltelli...la proibizione di un tal libro, la quale anche h\u00e0 ridondato in beneficio di questo fedelissimo publico. Et ita conclusum...Fine della professione di fede\".", "3. Fol. 299r-325r: \"[title] Risposta...ad una lettera scrittagli da un suo amico nella quale l'avvisava la poca sodisfazione di alcuni in leggendo nel Libro XIII della di lui Istoria civile del Regno di Nap[oli]...[text] Gentilissimo signor mio. Al pari della sua cordialita\u00e0 ed attenzione, che non tralascia in tutte l'occasioni ricolmarmi d\u00e8 suoi favori...la quale per le cose gi\u00e0 dette recher\u00e0 alla Republica maggior onore, e la render\u00e0 assai pi\u00f9 degna di gloria, e di eterna commendazione. Fine\".", "4. Fol. 326r- 370v \"[title] Brevi addizioni, correzioni, ed annotazioni alla sua Storia del Regno di Napoli stampata in Francese l'anno 1723 et or tradotta nell'Italiano l'anno 1743 [text] Avvertimento ai leggitori. Coloro che han conosciuto Pietro Giannone san ben conoscere quanto mai sia meritevole di lode...e delle ceremonie allora da praticarsi nell'aggiunta al suo Corpus Hist[oriae?] Ger[maniae? manorum?] tom[us] 2, p[ars] 100, lect[io] 13. Fine\".", "5. Fol. 371r-373v: Table of contents."], "003": ["OCoLC"], "260": ["Italy,|cca. 1745."], "008": ["080827s1745 it 000 0 ita d"], "099": ["Robbins MS 12"], "505 0": ["1. Fol. 1r-228v: \"[title] Trattato de' rimedi contro le scomuniche invalide e proibizioni de libri che si decretano in Roma [text] Parte I Dell'invalit\u00e0 delle censure fulminate del Vicario di Napoli e de' rimedi contro di quelle. La storia civile del Regno di Napoli la quale io presi a scrivere...tanto \u00e8 lontano che possa recar sollieva e mettere le loro anime in istato di quiet\u00e0 , e tranquillit\u00e0. Fine della III. Parte\"."], "100 1": ["Giannone, Pietro,|d1676-1748."], "546": ["Italian."], "520": ["A treatise by Pietro Giannone in defense of his work Storia civile del Regno di Napoli, because of which he was excommunicated and his book was placed on the Index of Prohibited Books."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the possession of Joseph Martin."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper, fol. i + 373. Foliation starts at first page of text after title page; original foliation incorrect as it skips fol. 193, and after fol. 194 the foliation starts again at 184. Quires mostly in 12s but difficult to discern due to tightness of binding.", "Layout: Written in 24-29 long lines.", "Script: Fol. 1r-180v (i.e. parts I & II) written in a very neat cursive script; fol. 181r-end written in a much more rushed hand.", "Binding: Vellum over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 12.", "Former Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), BX1767 G434 1745."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, August 2008."], "005": ["20080827040155.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)244493817"], "300": ["|3Original:|a373 leaves :|bpaper ;|c282 x 200 (245 x 150) mm bound to 290 x 210 mm.", "|3First copy:|a1 microfilm reel :|bnegative (MN 98-92) and positive (Robbins MS 12)", "|3Second copy:|a1 microfilm reel :|bnegative (MN 99-20 ) and positive (Robbins MS 12)"]}, "RobbinsMS152": {"001": ["ocn192047764"], "260": ["Italy?,|c1705."], "040": ["BOL|eamremm|cBOL"], "520": ["Transcription of two letters regarding the relative power of the papacy and the secular princes in Poland."], "300": ["|3Original: 26 leaves :|bpaper ;|c227 x 180 (203 x 152) mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 08-136) and positive (Robbins MS 152)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=89;fullview=yes"], "008": ["080215s1705 it 000 0 lat d"], "099": ["Robbins MS 152"], "003": ["OCoLC"], "245 00": ["Crisis politico theologica :|bEpistolae famosae larvati cuiusdam equitis Poloni de potestate Summi Pontificis Romani et eiusdem decreto adversus [dominos] primatem et episcopos regni Poloniae senatores vulgatae. Anno 1705, mense Augusto."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Housed in a manila folder marked \"Renzo Rizzi Libri Antichi...Milano\""], "500": ["Ms. document.", "Title from title page (fol. 1r).", "Collation: Paper, fol. 26 ; unbound quires, 1-6\u2074 7\u00b2.", "Layout: Written in 27 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: Unbound quires. Quires 1-6: two nested bifolia; quire 7: one bifolium.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 152."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, February 2008."], "005": ["20080215022016.0"], "505 0": ["Fol. 1r-26r: [title] Crisis politico theologica. Epistolae famosae... ; fol. 2r-10v: \"[text] Postea quam epistola tua ad manus meas pervenit...Consilio proinde cum theologis inito submitto tibi quod desideras\" ; fol. 10v- 26r: \"[title] Sensus theologorum de potestate Summi Pontificis [text] Optime iudicasti vir nobilissime de potestate Summi Pontifici...si non eo facilius condonaverint tibi quo tua tum ruditatis circa statum Regni Polonia, tum haeretica impudentia, luculentum toti orbi praebuisti testimonium\" ; fol. 26v: blank."], "035": ["(OCoLC)192047764"], "546": ["Latin."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS210": {"001": ["06-B3882"], "260": ["[Germany,|cbetween 1475 and 1482]"], "505 0": ["Fol. 1r-8v: \"[Text] Hereticus est pie recipiendum ad penitentiam. Et iniunge sibi ut iniunget...tractat [...] cuius est //.\""], "520": ["A tiny manuscript containing a penitential for the use of priests. It contains two parts: an extensive list of sins including many crimes of a violent or sexual nature, and a list of quotes from several Church Fathers on the duties and functions of the priest. Among the authorities quoted, S. Bernard holds pride of place, leading to the conjecture that the text was compiled at or for a Cistercian monastery. In the manuscript, S. Bonaventura is cited without the title \"beatus\": since Bonaventura was canonized in the year 1482, this should be a suitable 'terminus ante quem for the manuscript."], "300": ["8 leaves :|bpaper; |c135 x 100 (115 x 85) mm bound to 135 x 100 mm."], "510 4": ["Phillipps, T. Cat. ms.|c725."], "852 8": ["CUL|bRBCAG|hRobbins MS 210|xCIN=JKN"], "008": ["060815q14751482gw ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["De penitenciis iniungendis."], "546": ["Latin."], "583": ["|zCataloged in hand by Silvia Donghi, August 2006."], "561": ["Three 19th century bookplates are visible on the cover: one reads \"141\", the second reads: \"166-2\" and the last one reads: \"725\". This one is the call number from the library of Sir Thomas Phillipps, to whom the manuscripts used to belong."], "500": ["Ms. codex.", "Collation: Paper, fol. 8; 1\u2076 2\u00b2. The watermark is a variant of Briquet 11808-11811 ('Monts').", "Layout: Written on up to 37 long lines, above top line. Framed ruled in lead.", "Script: Written in cursiva bastarda, by two hands: the first one copied fol. 1r, and the second one copied fol. 1v-8v.", "Decoration:Red rubrics and red 2-line initials throughout the text. Several initials touched in red.", "Binding: Bound with red and brown marbled paper.", "Origin: Written in Germany in the last quarter of the 15th century, and possibly before 1482.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 210."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 210"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=96;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS170": {"001": ["ocn212384041"], "245 10": ["Virga censoria pro sede Romana et fide conciliorum et patrum adversus scripta Caroni et Valsii [h]ereticorum."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["An attack on the Remonstance of Peter Walsh, and on Redmond (or Raymond) Caron's defense of that work, in which, supporting Charles II, he repudiated papal infallibility and church interference in public affairs. Macedo wrote this Virga Censoria while he was professor of Moral Theology at Padua (after 1667). Many marginal and interlinear additions, perhaps autograph."], "510 4": ["Phillipps, T. Cat. ms.,|c5142."], "600 10": ["Caron, R.|q(Redmond),|d1605?-1666.", "Walsh, Peter,|d1618?-1688."], "260": ["Padua?, Italy,|bbetween 1667 and 1681."], "099": ["Robbins MS 170"], "246 2": ["Pro sede Romana concilio[rum]", "Macedo pro sede Romana concilio[rum]", "Pro sede Romana conciliorum", "Macedo pro sede Romana conciliorum"], "003": ["OCoLC"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, February 2008."], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (his no. 5142). Before that it was apparently part of the library of the library of Frederick North, 5th Earl of Guilford, although there is no bookplate (see D. Barbosa Machado, Bibliotheca Lusitana (1747) II, 96a; Hurter II, col. 356)."], "500": ["Ms. codex.", "Title from title page (fol. ir)", "Collation: Paper, fol. 112; 1-2\u2074 (+2) 3-11\u2076 12\u00b9\u2074 13-14\u2076 15-16\u2078 17\u2076 18\u00b2; contemporary foliation 1-59, then paginated 60-153; bifolium tipped in first quire between fols. i and 1.", "Script: Written in a cursive script by at least five hands.", "Binding: Bound in limp vellum over pasteboard, upper hinge and first gathering loose. Title on spine reads \"Macedo pro Sede Romani Concilio.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 170."], "651 0": ["Ireland|xHistory|y17th century."], "300": ["|3Original:|a112 leaves :|bpaper ;|c278 x 223 ( 230 x 130) mm bound to 284 x 210 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 08-138) and positive (Robbins MS 170)"], "610 20": ["Catholic Church|zIreland."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "008": ["080228q16671681it 000 0 lat d"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "630 00": ["Loyal formulary, or Irish remonstrance."], "546": ["Latin."], "100 1": ["Macedo, Francisco de,|d1596-1681."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080229034438.0"], "505 0": ["Fol. iar-108v: \"[text] Praefatio ad lectorem. Multa, ne nimis te lector optime detineam, in progressu operis industria dixi...Hac ratione reddetis que sunt Caesaris Caesari, et que sunt Dei Deo\" ; fol. 109rv: blank."], "035": ["(OCoLC)212384041"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS233": {"001": ["06-B3169"], "610 20": ["Catholic Church|xDoctrines.", "Catholic Church|xDoctrinal and controversial works.", "Catholic Church|xControversial literature|xCatholic authors."], "520": ["Manuscript of the Sentences of Peter Lombard dating from the age of the Paris schools and the emerging university. It was consciously prepared for annotation, as the pages were ruled not just to guide the copying of the main text but in anticipation of commentary. Occasionally there is a corrector note at the end of a gathering \"correctum est\" (i.e. after quires 3, 5, 6, and 7). 3 leaves are lacking: the first leaf of Book 1 (fol. 1 in the early numbering), leaf 37 and the final leaf of text. The upper outer corner of fol. 65 (the opening of Book III) has been cut away; some darkening (soot?) of some fore-edges at the beginning and end."], "LEADER": ["00000ctm 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=103;fullview=yes"], "100 0": ["Peter Lombard,|cBishop of Paris,|dapproximately 1100-1160."], "852 8": ["CUL|bRBCAG|hRobbins MS 233|xCIN=JKN"], "245 10": ["Libri sententiarum primus, secundus, tertius et quartus."], "506": ["RESTRICTED ORIGINAL: |bUse only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060710s1250 fr ||||||||||||00|||lat|d"], "240 10": ["Sententiarum libri IV."], "546": ["Latin."], "583": ["Cataloged from existing description and in hand by Jennifer K. Nelson and Silvia Donghi, July 2006."], "300": ["120 leaves :|bparchment ;|c325 x 233 (text: 195 x 124; glosses: 292 x 205) mm bound to 332 x 247 mm."], "561": ["Written on the back pastedown below the chaining staple on the back cover is the medieval inscription in red ink \"Libri sententiarum 1\u2079, 2\u2079, 3\u2079 [et] 4\u2079, followed by a library shelfmark \"LMN\"; an 18th century red library stamp bearing the initials in greek letters \"Mu Rho Theta Upsilon,\" and an ink inscription from the library of the Pious School in Vienna, can be seen at the bottom of first leaf \"Bibliotecae Viennensis Scholarum Piarum\"; early 19th century catalog slip pasted inside front cover detailing the 3 missing leaves."], "500": ["Ms. codex.", "Title from contemporary note on back pastedown.", "Collation: Parchment, fol. 120 (early foliation in ink and modern foliation in pencil differ slightly because of the 3 missing leaves); 1\u2074 2\u00b9\u2070\u207d\u207b\u00b9\u207e 3-4\u00b9\u2070 5\u00b9\u2070\u207d\u207b\u00b9\u207e 6-12\u00b9\u2070 13\u00b9\u2070\u207d\u207b\u00b2\u207e; horizontal catchwords framed in black ink at the end of each quire (catchword at the end of quire 9 is cropped); signature marks (written p\u2079, II\u2079, III\u2079, IIII\u2079, V\u2079, etc.) begin with the first quire of the text, excluding the first gathering of 4, which is the table of contents. An extra signature mark has been incorrectly written on the 9th folio of the 10th gathering. Contemporary foliation in black ink using arabic numerals, on top of each folio recto, in the middle of the upper margin.", "Layout: Main text written in 2 columns of 54 lines. Ruling mosly in lead, sometimes in ink, to accommodate more than 100 lines of commentary.", "Script: Main text written in a small textualis libraria gothic script by one hand, below top line.", "Decoration: 9-line initial at the opening of the 2nd book (fol. 37v) with the letter \"Q\" in red and decorative infilling of blue tendrils - extending into the margins with a flourish - and red circles; opening word \"Samaritanus\" of book 4 (fol. 88r) written 2 lines high in alternating red and blue lombardic capitals; numerous other alternating red and blue initials throughout with penwork in other color. Red chapter headings throughout.", "Binding: 15th century dark brown, blind-tooled leather over wooden boards, rebacked; original chaining staple attached to the top of back cover.", "Origin: Manuscript dates back to the age of the Paris schools and the emerging university and was presumably prepared to be actively used and annotated.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 233."], "505 0": ["Fol. 1r-4v: \"[Table of contents] Incipiunt capitula primi libri...Utrum visa impiorum pena minuat vel augeat bonorum gloria\"; fol. 5r-37v: [Book I] \"[text (begins imcompletely at 1.1.3.7. 'Utrum fruendum an utendum sit virtutibus')] \"Illud autem quo fruendum est propter se amandum est...verumptamen illi actum voluerunt quem Deus non voluit [rubr.] Hic finitur primus liber de misterio trinitatis\"; fol. 37v- 66r: \"[rubr.] Incipit secundus de rerum creatione et formatione corporalium et spiritualium et aliis pluribus eis pertinentibus [text] Quae ad misterium divinae unitatis atque trinitatis licet ex parte cognoscendum pertinere noscuntur...Sic enim precepit Deus ut in malis nulli potestati obediamus [rubr.] Explicit liber secundus\"; fol. 66r-88r: \"[text] Iam nunc his intelligendis atque pertractandis que ad verbi incarnati misterium pertinet...ut Samaritanus ad vulneratum medicus ad infirmum gracia ad miserum accedat [rubr.] Incipit liber tercius De incarnatione verbi...His tractatis que ad doctrinam rerum pertinent quibus fruendum est et quibus utendum est, et que fruuntur et utuntur, ad doctrinam signorum accedamus [rubr.] Explicit liber tertius\"; fol. 88r-120v: \"[rubr] Incipit quartus. Capitulum primum. Samaritanus enim vulnerato approprians curationi eius sacramentorum alligamenta adhibuit...et illa maligna voluntas erit eis ad cumulum poenae, per quam tamen non merebuntur quia nullus meretur nisi in hac vita.\" (text ends incomplete at the beginning of 4.50.2.1 'Quare dicuntur tenebre exteriores')."], "260": ["[Paris,|cca. 1250]"], "246 3": ["Petri Lombardi Libri IV sententiarum"], "090 8": ["Robbins MS 233"]}, "RobbinsMS103": {"001": ["06-B4165"], "260": ["[France,|cbetween 1179 and 1200]"], "505 0": ["1. Fol. 1r: [Anonymus, Collectio decem partium] Fol. 1r: \"[prologue] Voluntati vestre reverendissime pater ut valui parvi et sententias sanctorum patrorum multarum bibliothecis ecclesiarum...eum qui tollit peccata mundi pro meis dignemini interuenire peccatis.\"; 2. Fol. 1r-3v: \"[rubr.] Descriptio nominum et temporum Romanorum pontificorum. [text] Beatus Petrus natione Galileius...Adrianus...\"; 3. Fol. 4r-9v: \"[Prefatio] Exceptiones ecclesiasticarum regularum, partim ex epistolis romanorum pontificum, partim ex gestis conciliorum catholicorum episcoporum, partim ex tractatibus orthodoxorum patrum...ut hinc prudens lector advertat quod in unaquaque parte sibi necessarium querere debeat.\"; 4. Fol. 9v-10r: \"[Tabula] Prima pars continet de fide de quibusdam heresibus de baptismate...et de emendatione omnium criminum et redemptione ieiuniorum.\"; 5. Fol. ff. 10v-162v [Collectio]\"[rubr.] Incipiunt capitula prime partis....\"; \"[text] Credimus unum Dominum esse Patrem et Filium et Spiritum Sanctum...memoria eorum orationibus et oblationibus commendetur.\" (Fol. 10v-26v, Prima pars; fol. 26v-44v, Secunda pars; fol. 44v-67v, Tertia pars; fol. 68r-81r, Quarta pars; fol. 81v-93v, Quinta pars; fol. 94r-108v, Sexta pars; fol. 109r-125r, Septima pars; fol. 125r-137r, Octava pars; fol. 137r-153r, Nona pars; fol. 153r-162v Decima pars.)"], "505 8": ["Fol. 163r-169r: [Concilium Lateranense III, 1179] Licet devitanda (sic) discordia in electione romani pontificis manifesta satis...vocant invaluit dampnata perversitas ut iam non in occulto sicut alibi nequiciam suam exerceant sed.\""], "245 00": ["[Collectio decem partium]"], "852 8": ["CUL|bRBCAG|hRobbins MS 103|xCIN=JKN"], "700 0": ["Gautier,|cde Th\u00e9rouanne,|dapproximately 1090-1132.", "Hildebert,|cArchbishop of Tours,|d1056?-1133."], "246 2": ["|iSecundo folio :|asilvester natus Romanus"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060828q11791200fr ||||||||||||00|||lat|d"], "581": ["Theiner, Augustin, Augustini Theineri Disquisitiones criticae in praecipuas canonum et decretalium collectiones seu Sylloges Gallandiane dissertationum de vetustis canonum collectionibus continuatio (Romae: In Collegio Urbano, 1836)"], "520": ["This is a variant of the Collectio decem partium, possibly authored by Hildebert of Lavardin, Bishop of Meaux, Archbishop of Tours, or Gautier de Th\u00e9rouanne, and based on Ivo of Chartres's Panormia. The list of popes originally enumerated on fol. 1v-3v and including the dates of accession and death for each individual starts with Peter and ends with Calixtus II (1119-1124; \"Calixte II mort en 1124\" in a modern hand in pencil); to this list, seven other names are added, in a slightly different but contemporary hand: Honorius [II, 1124-1130], Innocentius [II, 1130-1143], Celestinus [II, 1143-1144], Lucius [II, 1144-1145], Eugenius [III, 1145-1153], Anastasius [IV, 1153-1154], and Adrianus [IV, 1154-1159]; then \"4tus Av. Seculo 12\" in a 17th or 18th-century hand, in ink, and the year \"1159\" are wrtten in pencil in a modern hand; the antipopes Celestinus II (1124), Anacletus II (1130-1138), and Victor IV (1138) are not included. The hand that has foliated the manuscript has also numbered the popes on the list appearing on fol. 1v-3v. The text of the canons of the Third Lateran Council (1179) ends abruptly in the middle of a statement at the beginning of Canon 27."], "546": ["Latin."], "300": ["|3Original: |a170 leaves :|bparchment ;|c230 x 155 (200 x 125) mm bound to 240 x 155 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-78) and positive (Robbins MS 103)"], "561": ["On the front pastedown is written in pencil by a 20th century hand, and enclosed in square brackets: \"[14187]\"."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. 170; 1-11\u2078 12\u2076\u207b\u00b9 13-21\u2078 22\u2076. No catchwords and no early foliation is provided. Modern foliation (17th-18th century?) in brown ink, Arabic numerals, in the upper right corner. The same hand added \"Pars 1a,\" \"Pars 2a,\" and so on, at the top of each folio. Chapter numbers in the margin: those in red ink are apparently contemporary with the copying of the manuscript; those in brown ink could have been inscribed at the time the manuscript was foliated. A few marginal notes.", "Layout: Fol. 1r-162v, written in 34-35 long lines; fol. 163r-169r: written in 26-31 long lines. Ruled in dry point. Very narrow outer margins.", "Script: Written in Carolingian minuscule script, by at least five different but contemporary hands.", "Decoration: Fol. 68v, zoomorphic 8-line red and green initial: a dog is biting the ascender of the letter \"B\". Fol. 94r, 5-line red and green decorated initial, partly cropped. Fol. 1r, a 3-line red initial penworked in green. Fol. 1v and 4r, 6-line red initial penworked in green. Many 1, 2 and 3-line red and green initials throughout the text. Many initials touched in red.", "Binding: Parchment over pasteboard. Two thongs used as fastening ties on the boards. Two leaves from a 15th century antiphonary are used as pastedowns, with musical notation on 4 lines. On the boards are still legible, although faded, these words written by a 18th century hand : \"Marquise de la Montagne de Phibisima (?)\".", "Origin: Written in France. The text on fol. 163r-169r refers to the Concilium Lateranense III, 1179, so the manuscript was certainly copied after this date.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 103."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "LEADER": ["00000ctm 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=64;fullview=yes"], "090 8": ["Robbins MS 103"]}, "RobbinsMS266": {"001": ["06-B3714"], "245 10": ["Discurso apologetico a la suspension de el exercicio de la juridicion de la Nunciatura de Espana /|cPor el Lic. D. Gabriel de Barreda."], "505 0": ["Fol. 2r-158v: \"[title] Discurso apologetico a la suspension de el exercicio de la juridicion de la Nunciatura de Espana. Por el Lic. D. Gabriel de Barreda [text] Las acciones de los Principes en el govierno de sus subditos traen consigo la justificacion que como dixo Baldus...abutuntur magnam censuram contemptui occasione prebentes cum nulla fere partis pro qua feruntur utilitate et cum magno cultus divini detrimento.\""], "520": ["An unpublished work by Gabriel de Barreda Ceballos, it is an apology in favor of the suspension of the ability of the Nunciature of Spain to exercise any jurisdictional authority."], "300": ["160 leaves :|bpaper ;|c191 x 135 (156 x 90) mm bound to 198 x 141 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 266|xCIN=JKN"], "008": ["060804s16uu sp ||||||||||||00|||spa|d"], "583": ["|zCataloged in hand by Jennifer K. Nelson, August 2006."], "546": ["Spanish and Latin."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "100 1": ["Barreda Ceballos, Gabriel de."], "561": ["On the back pastedown is the number \"266\"; on the front pastedown a former owner or bookseller has written, in Spanish, the author's name, stating that he is the same person who wrote a work called \"Catedra evangelica doctrina sagrada y politica sobre si es licito la reprehension de los Principes y Superiores,\" Lima 1663."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper (watermark depicts a cross within a circle with a crown on top, and below the letters \"MP\"), fol. ii + 160 + ii; 1\u2076 2-13\u2078 14\u2076 15-20\u2078 21\u2074. Quires signed at the beginning of each gathering by the same hand that wrote the text; catchwords at the end of each gathering.", "Layout: Written in 18 long lines; each folio frame ruled in lead only on the verso side; much heavy ink ruling (not particularly straight) also present to guide text, but not consistent throughout.", "Script: Written in a cursive script by one hand, possibly the author.", "Decoration: Enclosing the title and the author statement on the title page is an architectural image, resembling the fac\u0326ade of a church with a cross on top and an orb on each side. On the top of the first page of text there is a cross.", "Binding: Bound in soft vellum over pasteboard. Trace of 2 leather ties at fore edge, now lacking. Title on spine in gold lettering reads \"EXERCI / SUSPENS / DE LA / NUNCIA\"; handwritten title on spine reads \"Nunciatura.\"", "Origin: This manuscript, possibly written by the author himself, is interesting because the writer was familiar with laying pages for type and follows the conventions of catchwords and signatures to guide the binder. The writer hand-writes each signature at the beginning of each gathering, as well as placing a catchword at the end.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 266."], "090 8": ["Robbins MS 266"], "260": ["Spain,|c16--."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS130": {"090": ["Robbins MS 130"], "001": ["89-B3106"], "245 10": ["Gemeiner deutscher Civilprozess /|cnach Prof. Planck."], "043": ["e-gx---"], "100 1": ["Planck, Julius Wilhelm von,|d1817-1900."], "650 0": ["Civil procedure|zGermany|xHistory."], "260": ["Greifswald :|b[s.n.],|c1848-1849."], "008": ["890614m18481849gw 00| 0 ger d"], "590": ["Title page typewritten with note: Lectures delivered at Greifswald, 1849-1849."], "852": ["CU-L|bRBCAG|hRobbins MS 130|t1|xCIN=PAM; OID=XXX"], "500": ["Manuscript."], "300": ["|3Original:|a[118] leaves ;|c21 cm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-8) and positive (Robbins MS 130)"], "LEADER": ["00000cam 2200000 4500"]}, "RobbinsMS35": {"001": ["ocn454748569"], "245 10": ["Collection of treatises about the marriage of Gaston, duke of Orl\u00e9ans to Marguerite de Lorraine ;|bTreatise on the power of the church and the prince over the marriage of their subjects."], "040": ["BOL|eamremm|cBOL|dBOL"], "003": ["OCoLC"], "505 0": ["Fol. 1r-158v: Six petits traittez sur le mariage par rapport a celuy de feu monsieur le duc d'Orl\u00e9ans ; fol. 159r-301v: Le livret de Louvain avec sa r\u00e9ponse...Declarations authentiques de la bont\u00e9 et valeur du marriage de monseigneur le duc d'Orl\u00e9ans avec madame la princesse Margueritte fille de Lorraine... ; fol. 302r- 302v: blank ; fol. 304r-441r: Traitt\u00e9 du pouvoir de l'eglise et du prince sur les mariages de leurs sujets."], "260": ["France,|c[after 1757]"], "561": ["Once belonged to the Carcassone Seminary (seminary's stamp on title page)."], "008": ["091008q17571799fr 000 0 fre d"], "099": ["Robbins MS 35"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Pamela Diaz, September 2009."], "100 1": ["Marca, Pierre de,|d1594-1662."], "546": ["French."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "600 10": ["Orl\u00e9ans, Gaston,|cduc d',|d1608-1660.", "Orl\u00e9ans, Marguerite de Lorraine,|cduchesse d',|d1615-1672."], "500": ["Ms. codex.", "Title from the title page of each work (fol. iir, fol. 159r, fol. 304r)", "Layout: Written in 19-20 long lines.", "Script: Written in a neat cursive script.", "Binding: Marbled paper over pasteboard; leather gilt- stamped spine.", "Origin: Copied in France after 1757 in (date \"sept cent cinquante sept\" appears in title of treatise on fol. 84r).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 35."], "700 1": ["Habert, Isaac,|dca. 1560-ca. 1625"], "005": ["20091008030311.0"], "LEADER": ["00000nam 2200000Ia 4500"], "035": ["(OCoLC)454748569"], "300": ["|3Original: |a441 leaves :|bpaper ;|c245 x 188 (182 x 110) mm bound to 254 x 196 mm.", "|3Copy: |a1 microfilm reel : |b negative (MN 99-8) and positive (Robbins MS 35)"]}, "RobbinsMS281": {"001": ["06-B3815"], "245 10": ["Sefer ha-Mitsvot."], "505 0": ["Fol. 2r-15r: Enumeration of the 613 Commandments ; fol. 15v-17v: blank ; fol. 18r-38v: Introduction ; 39r-139v: Sefer ha-Mitsvot (Book of Commandments) ; fol. 140r: Scribe's colophon ; 140v-144v: blank."], "520": ["Text of the Sefer ha-Mitsvot (Kit\u0101b al-far\u0101\u02bcid). Preceding the main text is an enumeration of the 613 Commandments and an introduction."], "300": ["144 leaves :|bpaper ;|c241 x 169 (186 x 110) mm bound to 257 x 176 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 281|xCIN=JKN"], "246 2": ["Kit\u0101b al-far\u0101\u02bcid"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060810s1904 ye ||||||||||||00|||jrb|d"], "546": ["Judeo-Arabic and Hebrew."], "583": ["|zCataloged from existing description and in hand by Saul M. Friedman and Jennifer K. Nelson, August 2006."], "100 1": ["Maimonides, Moses,|d1135-1204."], "561": ["A previous owner inscribed Psalm 24:1 in Sephardic script, upside down, on fol. 43v (a common owner's inscription), indicating that this owner was likely Yemenite."], "500": ["Ms. codex.", "Title from title page (fol. 1v).", "Collation: Paper, fol. 144 (watermark depicts a moon inside a shield); 1\u2078\u207a\u00b9 2-18\u2078 19\u2078\u207b\u00b9; catchwords at the end of each page.", "Layout: Written in 27 long lines. Ruled in dry point.", "Script: Section headings written in Yemenite square script, main text in Sephardic mashait script, by one hand.", "Decoration: Title (fol. 1v) in red and black ink in form of house; the end of the section on Positive Commandments (80v) is an intricate design in red and black; initials throughout touched with red, black and green ink.", "Binding: Modern half vellum and cloth over wooden boards; stiff, brown paper for endsheet and pastedown.", "Origin: On the title page page (fol. 1r) the scribe writes \"Written for the love and passion of (my) good friend, (a) good man...my beloved...Ya\u02bcish ibn Selim al-Badi\u1e25i...\"; the colophon on fol. the scribe writes \"God should help me...I the scribe, the dust at the feet of scribes, the weak, the wretched, the lowest of the low...the young Salem ibn Ya\u1e25ya ibn \u1e24ayim Kora\u1e25...Written for the love and passion of (my) upstanding friend of good lineage...Ya\u02bcish ibn Selim al-Badi\u1e25i, here in the holy community of \u1e62an\u02bb\u0101\u02bc on the 6th day of the week (Friday) on the first of the month of \u1e24eshvan the year 2216 of Shetarot 664 of creation (=1904)...\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 281."], "090 8": ["Robbins MS 281"], "260": ["Yemen,|c1904."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS149": {"001": ["ocn761333206"], "245 10": ["Consuetudines ordinis cartusiensis."], "040": ["BOL|eamremm|cBOL"], "520": ["The customs of the Carthusian order, including the Statuta antiqua, Statuta nova, and the Tertio compilatio. The manuscripts also includes the text of some prayers and an ecclesiastical calendar. It was likely created and/or used by the Certosa di San Giacomo in Capri, Italy."], "710 2": ["Carthusians."], "110 2": ["Certosa di San Giacomo (Capri, Italy)"], "260": ["Italy,|c[between 1475 and 1525]"], "099": ["Robbins MS 149"], "581": ["James Hogg, ed. The Evolution of the Carthusian Statutes from the Consuetudines Guigonis to the Tertia Compilatio: Documents, v. 1-3 (Salzburg, Austria: Institut f\u00fcr Anglistik und Amerikanistik, Universit\u00e4t Salzburg, 1989- )."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Note on bottom of 23v reads: \"Carthusie Sti Jacobi insule caprea.\" Pencil note on front flyleaf reads \"1510.\""], "500": ["Ms. codex.", "Title from fol. 22r.", "Collation: Parchment, fol. 300; 1\u00b3 2\u2076 3\u00b9\u00b2 4\u00b9\u2070 5\u00b9\u00b2 6\u00b9\u2070 7\u00b9\u00b2 8\u00b9\u2070 9\u00b9\u00b2 10\u00b9\u2070 11\u2078 12-18\u00b9\u2070 19\u00b9\u2070 (-1) 20\u2078 21-22\u00b9\u2070 23\u00b9\u2070 (-1) 24\u00b9\u2070 25\u2076 26\u00b9\u2070 27\u2078 28\u00b9\u00b2 29\u2078 30\u00b9\u00b2 31\u2078 32\u2074; catchwords at the end of quires 4-24.", "Layout: Written in long lines, 22-24 lines per page; some ruling in lead visible.", "Script: Fol. 4r-21v and fol. 238r-300v: written in a humanistic script; fol. 22r-236v: written in a gothic script. Marginal notes are in a variety of hands and inks (e.g. fol. 40r, 52v, 169r, 195v), suggesting use by a community.", "Decoration: Blue two-line initials in ecclesiastical calendar (fol. 4r-12v). Red and blue initials throughout rest of manuscript.", "Binding: Modern vellum over pasteboard. Blue ink on foredge, with traces of gilt underneath. Stored in brown cloth-covered box. Former mottled green box (collapsed) stored in manuscript file.", "Origin: The notes in the upper margin of the of rectos 25- 233 match the hand that wrote \"Carthusie Sti Jacobi insule caprea\" on 23v. San Giacomo is also mentioned on 3r. The manuscript was likely made at San Giacomo. Folios 25-235 were likely an earlier book that was combined with the rest of the manuscript after 1510. Folio 20r mentions Franciscus de Puteo (Fran\u00e7ois du Puy), a sixteenth-century Carthusian.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 149."], "300": ["|3Original:|a299 leaves :|bparchment ;|c110 x 80 (87 x 60) mm bound to 118 x 84 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS 149)"], "610 20": ["Carthusians|vRules."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=86;fullview=yes"], "008": ["111117q14751525it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez and Jennifer K. Nelson, November 2011."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20111117031240.0"], "505 0": ["Fol. 1r: Note in two hands with incipit: \"Non sint codigne passiones...\" -- fol. 2r-2v: \"Oratio devota,\" a prayer with incipit: \"O Domine Iesu Christe fili Dei vivi miserere mihi misero peccatori et omnibus servis tuis...\" -- fol. 3r: Prayer with incipit: \"O Domina mea S. Maria me in tuam benedictam...\" -- fol. 3v: Inscription by Vicenzo Guittieres, monk at St. Giacomo: \"Alli 7 de septempro sono venuto Jo Vicenzo Guttierres a farme monaco certosino di Sto. Jacovo di capri, fo clausnaro alli io del vedesmo mese et fo vestito alli 18 de octobro il di de Sto. Luca et il mio nome e D. Bruno nome santissimi fondatore del ordine certosino laus Deo nome tanto tiempo desiderato / domus Capi\" (last words carry over onto bottom of 4r) -- fol. 4r-12v: Ecclesiastical calendar -- fol. 13r-18r: \"De origine ordinis cartusiensis brevis annotatio\" (rubric heading is crossed out, but text matches text with that title from printed edition) -- fol. 18v-19v: \"Modus legendi statuta\" -- fol. 20r-21v: \"Inhibitio reverendi patris ne aliquis det operam ut statuta et privilegia imprimantur Franciscus de Puteo lectori salus\" -- fol. 22r -104r: \"Incipiunt capitula prime partis consuetudinum ordinis cartusiensis\" (with chapter list on 22r-23v; rectos from 25r on read \"Prima pars antiquorum\" in upper margin in later hand) -- fol. 104r-168r: \"Incipiunt capitula secunde partis consuetudinum ordinis cartusiensis\" (with chapter list on 104v-105r; rectos from 106r on read \"2a pars antiquorum\") -- fol. 169r-195r: \"Incipiunt capitula tertie partis consuetudinum ordinis cartusiensis\" (with chapter list on 168r-168v; rectos from 169r on read \"3a p. ant.\") -- f. 195v: \"Incipit prologus in novas constitutiones ordinis cartusiensis\" -- fol. 195v -207r: \"Incipiunt capitula prime partis novarum constitutionum ordinis cartusiensis\" (with chapter list on 194r; rectos from 195r on read \"Pa p. novarum\") -- fol. 207r-226r: \"Incipiunt capitula secunde partis novarum constitutionum ordinis cartusiensis\" (with chapter list on 207r-v; rectos from 226r on, including the third part, read \"2. p. no.\") -- fol. 226r-: \"Incipiunt capitula tertie partis novarum constitutionum ordinis cartusiensis\" (with chapter list on 226r; rectos read \"2. p. no.\" even though it is part three) -- fol. 234v-236v: \"Indutus novitius\" -- fol. 238r-299v: \"Incipiunt capitula tertiae compilationis statutorum ordinis Cartusiensis\" (including list of chapters on 238r-v) -- fol. 300v: \"Explicit compilatio statutorum ordinis cartusiensis scripta die 9 dicembri 1510.\""], "035": ["(OCoLC)761333206"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS226": {"001": ["06-B3591"], "245 10": ["[Legal documents concerning the family of Delfini from Corniglia, Cinque Terre, dated 1531-1545]"], "520": ["This manuscript contains 6 different legal documents plus one short vernacular note, copied by 7 different hands, gathered in order to form a collection. The documents are all related to legal matters concerning the Genoese family of the Delfini di Corniglia. Among the names of persons that it is possible to read in the documents there are: Gasparinus de Delphinibus, Octobonus, Simon, dominus Vinciguerra, Iohannes de Bonetis, Maria de Blanchis, Matthaeus de Villa, Christophorus de Bernabovis. On fol. 30v there is a note written in Italian concerning money."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[Italy,|cbetween 1531 and 1545]"], "506": ["RESTRICTED ORIGINAL. Use of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Fol. 1r, written in black ink by a 20th century hand: \"Wilfrid Blunt / Florence 1951\"; on back flyleaf, written in pencil by a 20th century hand, there are the following numbers and letters: \"FSS-44-TES\". The back flyleaf on recto also reads: \"CL21 gamma 55 (or SS)\", written in pencil by a 20th century hand."], "500": ["Ms. codex.", "Title from fol. 1.", "Collation: Parchment, fol. i (medieval parchment) + 40 + i (medieval parchment); 1-5 \u2078. No quire numbers, no catchwords, no contemporary foliation.", "Layout: Written in 24-29 long lines. Frame ruled in lead, with very narrow margins.", "Script: Written by seven different hands in a cursive minuscule script, that ranges from very tidy and legible to very confusing.", "Music: Flyleaves from a medieval liturgical manuscript, possibly an antiphonary, containing musical notation on 4 lines, 3 ruled in dry point and one ruled in red.", "Binding: Wooden boards possibly original; quarter bound in leather in the 20th century.", "Origin: Possibly written around Genoa and the Cinque Terre; the documents are dated between 1531 and 1545.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 226.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), KE1780 G399 .D44."], "246 3": ["Contratti ed atti notarili riguardanti la Famiglia De' Delfini di Cornegliano (Cinque Terre, Genova)"], "300": ["40 leaves: |bparchment ;|c215 x 155 (180 x 130) mm bound to 220 x 155 mm."], "505 8": ["2. Fol. 17r-21v: \"In nomine Domini amen. Cum verum fuerit et sit quod delata fuerit sententia arbitramentalis ... ego [V?]incentius Lors de Delbara (?) manibus.\"", "3. Fol. 21v-23r: \"In nomine Domini amen. Baptista de Delfinis de Cornilia utatis legiptimo filius...Antonio Cauria...et rogatum.\"", "4. Fol. 23rv: \"In nomine Domini amen. Blanchineta filia Pelegri[ni] de Nigrono navoni (?) et uxor Iohannis Baptistae de Delphinis...Nicolus Pilinia (?) [...] notarius.", "5. Fol. 24r-30r: \"In nomine Domini amen. Notabilis salvagius de Nigrono de Simonis eamque procuram...Ego Nicolaus Palavicinus...aopstolica et imperiali auctoritatibus notarius...\"", "6. Fol. 30v: \"Nota como lo zorno supra scripto domino...de l[ire?] 413/10/4...Petro...\". Fol. 31r-34v blank.", "7. Fol. 35r-39r: \"In nomine Domini amen. Venerabilis dominus presbiter Michael de Vittiliono archipresbiter ecclexie Sancti Iohannis de Montobio...1545 die quinta Marci executum est per me notarium...Bernardus...Granullus notarius...\". Fol. 39v-40v blank."], "650 0": ["Law|zItaly|zGenoa|xHistory|xSources."], "100 0": ["Delfini di Cornegliano family."], "852 8": ["CUL|bRBCAG|hRobbins MS 226|xCIN=JKN; upd=lmd"], "008": ["060728k15311545it ||||||||||||00|||lat|d"], "583": ["|zCataloged and in hand by Silvia Donghi, July 2006."], "546": ["Latin."], "651 0": ["Genoa (Italy)|xHistory|xSources."], "700 1": ["Blunt, Wilfrid,|d1901-1987.|4asn|4fmo|5CUL."], "505 0": ["1. Fol. 2r-16r: \"In nomine Domini amen. Anno a nativitate eiusdem milleximo quingenteximo trigeximo primo inditione quarta die sexto mensis octobris. Noverunt universi et singuli quod in presentia mei...Ego Iohanne Baptista de Rolandis de manarola de districti orientali Genue...rogatus sum me subscripsi et signum meum manu propria apponi consuetum ad fidem omnium premissorum.\" Fol. 16v blank."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=99;fullview=yes"], "090 8": ["Robbins MS 226"]}, "RobbinsMS301": {"001": ["ocn637257181"], "260": ["Northern Italy,|c[between 1400 and 1425]"], "040": ["BOL|eamremm|cBOL"], "520": ["A treatment of Roman law organized according to the chapter headings of the Decretales of Gregory IX, book 2. Includes the chapter headings of all of titulus 1, (except for chapter XVII (\"Qualiter et quando\")), all of titulus 2, and the first three chapters of titulus 3. Manuscript was once part of a larger work: old foliation in ink remains in upper right-hand corner, fol. 59-82. In addition, there is also foliation, in ink, upside-down in the bottom left- hand corner. Foliation is not sequential, indicating that, perhaps, paper that was foliated for another purpose was inverted and reused for the present manuscript. This foliation proceeds as follows: fol. 174-176, 96, 99, 183- 186, 126-139."], "650 0": ["Roman law.", "Canon law."], "300": ["|3Original:|a24 leaves :|bpaper ;|c280 x 210 (210 x 115) mm, bound to 290 x 215 mm.", "|3Copy:|aNOT YET MICROFILMED."], "008": ["100604q14001425it 000 0 lat d"], "099": ["Robbins MS 301"], "003": ["OCoLC"], "245 00": ["[Treatment of Roman law organized according to chapter headings of Gregory IX, decretals, book 2, tituli 1-3]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (watermark similar, but not identical to, Briquet 2752), fol. 1-24 (fol. 24 is pastedown); 1\u00b9\u2074 2\u00b9\u2070.", "Layout: Written in 42 long lines; frame-ruled in lead.", "Script: Written in a highly abbreviated cursiva currens script by one hand, below top line.", "Binding: Bound in paper over pasteboard; leather spine.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 301."], "583": ["|zCataloged in hand by Jennifer K. Nelson, June 2010."], "005": ["20100604040902.0"], "505 0": ["Fol. 1r-7r: Titulus I, De iudiciis: Cap. I, \"Denuo vult Deo (sic)\"...Cap. XXI, \"Significaverunt\" -- fol. 7r-15r: Titulus II, De foro competenti: Cap. I, \"Si quis clericus\"...Cap. XX, \"Licet\" -- fol. 15r-19r: Titulus II, De libelli oblatione: Cap. I, \"Ignarus\"...Cap. III, \"Dilecti\" -- fol. 19v-23r: blank."], "035": ["(OCoLC)637257181"], "546": ["Latin."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS117": {"001": ["ocn621673728"], "260": ["[Italy or Spain,|cbetween 1725 and 1775]"], "040": ["BOL|eamremm|cBOL"], "003": ["OCoLC"], "300": ["93 leaves :|bpaper|c320 x 210 (295 x 125) mm."], "510 4": ["Phillipps, T. Cat. ms.,|c5446."], "008": ["100519q17251775xx 000 0 lat d"], "099": ["Robbins MS 117"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, May 2010."], "245 00": ["Brevis canonici iuris historia."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 5446)."], "500": ["Ms. codex.", "Title from fol. 1r.", "Collation: Fol. ii (modern paper) + 93 + ii (modern paper); 1\u2076 2\u2078 3\u00b9\u2070 4\u00b9\u2074 5-6\u00b9\u00b2 7\u00b9\u2078 8\u2074 9\u2076 10\u00b9\u2070 11\u00b2.", "Layout: Main text written in 65 lines only in the left- hand column of each folio. The right-hand column of each folio was left blank for notes of varying lengths, sometimes none, sometimes filling the entire space.", "Script: Written in a cursive script by one hand. Both main text and notes are in the same hand.", "Binding: Currently bound in paper wrapper; most recent binding (vellum over pasteboard) is detached and stored in manuscript file (title on spine: \"Hist. Iuri Cano.\"", "Origin: The manuscript appears to have been copied in a Jesuit environment, either in Spain or in Italy, as the last line in the text includes the name of St. Aloysius Gonzaga (1568-1591), a Jesuit. The writing must have been completed after 1726, the date of canonization of Aloysius by Pope Benedict XIII, following the canonization of 1621 by Pope Gregory XV.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 117."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "005": ["20100519044132.0"], "505 0": ["Fol. 1r-93v: \"[text] Brevis canonici iuris historia\" -- fol. 1r-6r: \"[text] Nemo profecto adeo variarum lecterarum ignavus atque expers invenitur ut ei in dubium...non auctoritate Pontifica, sed privata tantum hominis collectoris arbitrio (?) concinnata faciunt\" -- fol. 6r- 32r: \"[text] Institutionum canonicarum liber I. Ius canonicum quod et a pluribus ius sacrum nuncupatur, eo quod ex divinis oraculis et apostolorum praeceptis...videtur non ex iure divino sed ex iure humano clericorum exemptiones tum personales tum reales prodire\" -- fol. 32r-67r: \"[text] Institutionum canonicarum liber II. Personas res excipiunt quo nomine comprehenduntur sacramentae ecclesiae, beneficia, pensiones...dantque eius exempla in Chalcedonensi concilio parte secunda titulo vigesimo octavo\" -- fol. 67r-78r: \"[text] Institutionum canonicarum liber III (title erroneously given as 'Pars II'). De eclesiastica [sic] iurisdictione. Potestastem a Christo eclesiae [sic] data ex eis verbis repetenda posse videtur...ius civile sequitur ac proinde videri potest libro quarto Institutionum civilium titulo de officio iudicis Addas nonnulla de hac re libro quarto\" -- fol. 78r -93v: \"[text] Institutionum canonicarum liber IV. Titulus primus de eclesiastica (sic) in criminalibus causis iurisdictione. Nunc de iudiciis nobis erit agendum. Porro Clericorum delicta...Et haec tum de irregularitatibus tum de totius canonici iuris disciplinam et praxin sufficiunt. Laus Deo, et Mariae et S. Iuveni Aloysio Gonzage.\""], "035": ["(OCoLC)621673728"], "546": ["Mostly Latin, some notes in Italian (throughout the first half of the manuscript the notes are in Latin; in the second half, the scribe/commentator switches to Italian)."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS112": {"001": ["ocn760235217"], "245 10": ["Constituciones provinciales Cantuar[iensis] Provinc[iae]."], "040": ["BOL|eamremm|cBOL"], "520": ["Contains Lyndwood's Constitutiones provinciales. Chapter names are rubricated, and current chapter name is written in red in upper right margin of each recto. Short note on the nature of the heavens precedes the main text and is written in the same hand. At the end of the text, a later scribe has added an excommunication formula and an index in a cursive hand. Text on back pastedown reads \"Quid valet in bellis...\""], "260": ["England,|c[between 1475 and 1499"], "099": ["Robbins MS 112"], "100 1": ["Lyndwood, William,|d1375?-1446."], "506": ["RESTRICTED ORIGINAL.|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["On front pastedown, a short text in a fifteenth-century hand reads: \"casti humiles et abstinenciam habentes . . . , \" and an owner's mark in a sixteenth-century hand: \"Johanes Barnham me tenet.\" Another owner's mark, in a fifteenth-century hand, on fol. ix-v (back flyleaf): \"Iste liber constat Johanni Buxtum Cappellano.\" Marginal digits in brown ink (e.g. fol. 5v); marginal notes in two hands: one is that of the scribe who copied the Constitutiones (e.g. fol. 7r), the other is the hand that wrote on fol. 142v-144v (e.g. fol. 15r). Note on fol. 93v, in an eighteenth-century hand: \"Lindini.\" At some point in the late nineteenth or early twentieth century the book was in the library of James Patrick Ronaldson Lyell (1871-1948; his bookplate on front pastedown, with the motto \"Viam aut inveniam aut faciam\"). Old shelf marks on fol. i(ii)r: \"182,\" in pencil and fol. ii(iii)r: \"C,\" in ink. Fol. 145v has pencil mark reading \"S. 20. 4. J1 Ny.\" Pencil mark on back pastedown reads \"21629.\""], "500": ["Ms. codex.", "Title from fol. 1r.", "Collation: 1-2\u00b9\u00b2 3\u00b9\u2070 4-5\u00b9\u00b9 6\u00b9\u2070 7\u00b9\u00b2 8\u00b9\u2070 9\u2078 10-11\u00b9\u00b2 12\u00b9\u00b9 13\u00b9\u00b2 14\u00b9; catchwords.", "Layout: Written in long lines, 21 lines per page. Margins delineated in dry point and ink; prickings in the margins.", "Script: Written in a neat gothic script by one hand.", "Decoration: Book and chapter titles, line fillers, and rubrics in red ink. Penwork initials in blue and red ink on most folios.", "Binding: Fifteenth-century doeskin over wooden boards. Front cover bears remains of one red clasp. Four raised bands on spine, five compartments. The manuscript is now kept in a modern cardboard case covered with dark brown leather. Title on spine of box reads: \"William Lyndewode / Constituciones provinciales MS. SAEC. XV.\"", "Origin:", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 112."], "300": ["|3Original:|a154 leaves :|bparchment ;|c126 x 90 (85 x 58) mm bound to 137 x 100 mm."], "610 20": ["Catholic Church.|bProvince of Canterbury (England)", "Catholic Church|zEngland|zCanterbury (Kent)"], "505 8": ["Fol. 1r-142v: [William Lyndwood] Constituciones provinciales Cantuar[iensis] Provinc[iae] septem milia annorum\" -- fol. 1r-20r: \"[Liber primus] summa trinitate Peccham Ignorancia sacerdotum et infra. Ne quis per ignoranciam se excuset quin sciat articulos fidei...per hoc conuinci ualeant parti lese ad interesse et restituenda dampna omnia teneantur\" -- Fol. 20r-32r: \"[Liber secundus] Incipit liber secundus de iudicijs Oxon. Primo In causis et infra Statuimus ut decani rurales nullam causam matrimonialem de cetero audire presumant...Et omnes alios qui ad huiusmodi obseruacionem statuti prestiterint iuramentum absoluuimus ab eodem\" -- fol. 32r-101r: \"[Liber tertius] Incipit liber iij de uita et honestate clericorum ox. [primo] Ut clericalis ordinis honor debitus obseruetur...cum per eos in ecclesia dei per talia presumpta scandalum giretur\" -- fol. 101r-103v: \"[Liber quartus] Incipet liber iiii de sponsalibus et matrimonijs Oxon. [secundo] Walterus Matrimonium sicut alia sacramenta cum honore et reuerencia...sibi competencia ab antiquo interesse presumpserit penam in ea latam subeat ipso facto\" -- fol.103v-142v: \"Liber quintus] Incipit liber [quint]us de accusacionibus siue denunciacionibus Edmundus Sint in quolibet decanatu duo uel tres uiri...omni censura fore canonice compellendos Expliciunt constituciones prouinciales secundum Compilacionem Willelmi Lyndewode quondam meneuie episcopi Cuius Anime propitietur Deus.\"", "Fol. 142v-143r: \"[Excommunication formula] De auctoritate dei patris omnipotentis et filij et spiritui sancti et sancte marie matris domini et beati Petri apostolorum principis et omni apostolorum et omni sanctorum dei et sanctorum canonum et nostri ministerii excommunicamus et anathematizamus et a liminibus sancte matris ecclesiae sequestramus omnes illos: [text removed] et sicut extinguitur lucerna hec in conspectu hominum ita extinguantur anime eorum ante viventem deum nisi ad satisfaccionem et ad emendacionem venerint fiat fiat amen. / Ista sententia quator per annum pronuntietur post aspersione aque benedicte. / [text perpendicular in margin] malefactores ut sint maledicti vigilando dormiendo manducando bibendo ambulando sedendo in terris et in aquis ubicumque fuit.\"", "Fol. 143v-144r: Tabula constitutionum provincialium secundum ordinem librorum.", "Fol. 144v: \"[text] Sentencia excommunicacionis promulgantur prima dominica adventus domini prima dominica XL dominica proximo post festum sancte trinitatio et dominica proximo post festum assumpcionis beate marie.\""], "650 0": ["Ecclesiastical law|zGreat Britain.", "Ecclesiastical law|zEngland|zCanterbury (Province)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=70;fullview=yes"], "008": ["111110q14751499enk 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Ana E. Enriquez, November 2011."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20111110035415.0"], "505 0": ["Fol. vi [vii]r-v: \"[text] Celum multiplex. Celum Aerium Etherium Olympium Igneum...a centro terre usque ad centrum celi Saturni quod est septimum celum.\""], "035": ["(OCoLC)760235217"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS282": {"001": ["06-B3811"], "245 10": ["[Mishneh Torah (ha-yad ha-Hazaqah)]"], "505 0": ["Fol. 1(fragment) -fol.2r: Introduction ; fol. 2r-15r: Enumeration of Commandments ; fol 15r-16r: Further explication of text to come ; fol. 16r-26r: Author's table of contents of the 14 books of the Mishneh Torah ; fol. 26r- 87v: Sefer mada ; fol. 89r-152r: Sefer ahavah."], "520": ["Contains the text of the Sefer Mada (Book of Knowledge) and the Sefer Ahavah (Book of Adoration), books One and Two of the 14 books of the Mishneh Torah. Text is acephalous, as evidenced by the fact that the first folio (a fragment housed in a mylar sleeve separate from the manuscript) contains the last part of a missing introduction to the work (the text on fol. 2r is the continuation of the text on the loose leaf, the first 2 lines on fol. 2r being the last 2 lines of the introduction). On Fol. 117v and 118r in the Sefer Ahavah are diagrams of the placement of the passages of scripture on parchment in Tefilin. Pages quite browned. Conservation treatment report available in manuscript file."], "300": ["|3Original:|a152 leaves :|bpaper ;|c209 x 146 (155 x 103) mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 08-121) and positive (Robbins MS 282)"], "008": ["060810s1591 ye ||||||||||||00|||heb|d"], "852 8": ["CUL|bRBCAG|hRobbins MS 282|xCIN=JKN"], "260": ["Yemen,|c1591."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Sefer mada ;|bSefer ahavah"], "546": ["Hebrew."], "583": ["Cataloged from existing description and in hand by Saul M. Friedman and Jennifer K. Nelson, August 2006."], "100 1": ["Maimonides, Moses,|d1135-1204."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (glossy oriental, Yemenite), fol. ii (modern paper) + 152 + i (modern paper). Spine edges of leaves have been exposed and some folds are intact, so the collation can be studied. Notes on the gatherings made during conservation treatment in manuscript file. Some catchwords may be visible where previous mends have been removed.", "Layout: Written in 25 long lines. Ruled in dry point.", "Script: Section headings written in Temanic square script, text in Temanic mashait script, by one hand.", "Decoration: Each text ends with the image of two sun- looking pictures drawn in the same black ink as the text, with a black \"X\" in the center and 12 lines radiating out towards the edges (Union Jack-like, but an \"X\" rather than a cross). The 2 sun-like images on fol. 87v have 8 points each; on fol. 152v one sun has 6 points and the other has 5.", "Binding: Manuscript is disbound and is housed in an acid- free folder in a clamshell box; especially fragile leaves have been placed in mylar sleeves.", "Origin: The colophon at the end of Sefer Mada (fol. 87v) reads: \"The scribe, the servant, the insignificant, the youth David ibn Solomon ibn Joseph ibn Shemaryah known as al-Nad\u02bcaf); the colophon at the end of Sefer Ahavah (fol. 152v) reads: \"Wednesday, 24 Av 1902 by the reckoning of Shetaroth (=1591) in the city of al-\u1e62afa by the well of water al-Saka,\" followed by the scribe's name and patronym as above. Fol. 88r contains only the chapter heading from Tur/Shulkhan \u02bbArukh, Even ha-Ezer, hilkhot Kidushin, written in a different hand, suggesting that the scribe recycled some pages from another unfinished manuscript. Fol. 88r and 89r also contain some notes from the scribe of the main text that read \"test / shalom / shalom / to the far / to the near\" (fol. 88r) and \"test of the ink and choice of the pen\" (fol. 89r).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 282."], "090 8": ["Robbins MS 282"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS18": {"001": ["ocn245414923"], "245 10": ["Registro di lettere della nuntiatura di Francia del Card[inale] Ubaldino."], "040": ["BOL|eamremm|cBOL"], "520": ["Manuscript includes copies of letters sent by Cardinal Roberto Ubaldini, Papal nuncio, from Paris between 4 December 1612 and 27 January 1615, reporting on church affairs and socio-political circumstances in France and elsewhere in Europe. The bulk of the collection is comprised of several hundred letters addressed to Cardinal Borghese, probably Scipione (1576-1633), nephew of Pope Paul V. Other recipients were Cardinals Bandini, Roberto Bellarmino, Bevilacqua, Farnese, Filonardi, Gallo, Mellino, Monti, and Antonio Maria Sauli; the Cardinal of St. Cecilia (Paolo Emilio Sfondrati?); Antonio Caetani, Archbishop of Capua and nuncio to Madrid; the Archbishop of England; the Bishop of Savona, nuncio to Torino; the Bishop of Adria, nuncio to Lucerne; Giovanni Francesco Guidi di Bagno, Archbishop of Patras, vice-legate to Avignon; Guido Bentivolgio d'Aragona, Archbishop of Rodi, nuncio to Brussels; the General of the Order of St. Francis; the General of the Order of St. Augustin; the General of the Order of Premonstrantensians; Stefano da Tenda, Superior of the Capucins; and other contemporary eccelsiastical figures. Also included are letters to Monseigneur de Marilliac, state advisor to the King of France; Monsieur de Villeroy; and the Marquess of Malatesta, General of the Armies of His Holiness in Avignon."], "260": ["Italy,|c[between 1615 and 1625?]"], "008": ["080904q16151625it 000 0 ita d"], "099": ["Robbins MS 18"], "100 1": ["Ubaldini, Roberto,|d1581-1635."], "003": ["OCoLC"], "546": ["Mostly Italian, some Latin and French."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Purple stamp on fol. 49r reads \"Biblioth. Privata P. Praep. Gen. S. J.\""], "500": ["Ms. documents.", "Title from title page.", "Collation: Paper, fol. i + 414 + 1; quires 1-34 alternating gatherings of 10 and 14, quire 35 is gathering of 4.", "Layout: Written in 26 long lines.", "Script: Written in a rushed cursive script mostly by one hand.", "Decoration: Fol 1r (title page) in formal capitals with floral drawing at bottom of page adorned with a cross (10 x 20 mm).", "Binding: Vellum over pasteboard (detached).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 18."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson"], "005": ["20080904045549.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)245414923"], "300": ["|3Original:|a414 leaves :|bpaper ;|c260 x 194 (225 x 145) mm bound to 274 x 200 .", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-95) and positive (Robbins MS 18)"]}, "RobbinsMS28": {"001": ["06-B3963"], "245 10": ["Confessionale."], "520": ["This manuscript contains six different works, although the codex itself was clearly considered as an \"unicum\" from the beginning. The colophon on fol. 187r reads: \"Quicquid agis prudenter agas et respice finem.\" The watermarks seem to lead to the city of Bergamo in Northern Italy, but the manuscript was probably copied in the Veneto region, as attested by spellings specific to that zone such as \"constrenze\" for \"constringe\", \"zorno\" for \"giorno\", \"manzare\" for \"mangiare\", \"fuze\" for \"fugge\". The end of text 1 is different from the printed florentine version of 1507 (see bibliography), whose text ends with \"Ma se lha facto debbelo obseruare se non e dispensato dal Papa & ladonna se uuole lopuo seguire.\" At this point the manuscript includes an additional paragraph: \"et fioli et fiole mentre che sono nella podesta del padre non possono far noto on de longo peregrinagio on daltro donde sequisse priuditio al padre del suo seruitio senza la uolunta desso Ma de la religione on castita possono fare voto et sono tenuti ad obseruarlo. Passati lo masculo xiiiio anni et la femina undesi inmediate et inanzi tale eta non e rato ne fermo voto chi facesseno de religione ma po esser annulato da padre on tutori se fusseno pupilli et simelmente cavati da la religione ma non dopo da la dita eta Amen.\" The incipit of text 2 matches the beginning of Varia de confessione et de peccatis or Moralium dogma philosophorum in MS Munich, Clm 28673 ff. 90-94, and is similar to the beginning of Moralium dogma philosophorum in MS London, British Museum, Harley 658 ff. 73-77. The incipit of text 3 is identical to MS Oxford, Bodleian Library, Canonici misc. 100 ff. 106 (ss). The incipit of text 4 matches MS Munich, Clm 28673, ff.86 (-90)."], "510 4": ["Antoninus de Florentia, Specchio di conscientia el quale e libro degno & utile a chi desidera di saluare lanima, Impresso in Firenze ad petitione di ser Piero Pacini da Pescia, 1507.", "Sancti Antonini Archiepiscopi Florentini Ordinis Praedicatorum Summa theologica in quattuor partes distributa, Veronae, Ex typographia Seminarii, apud Augustinum Carattonium, 1740."], "260": ["[Veneto?,|cbetween 1451 and 1500]"], "246 2": ["|iSecundo folio :|a[constren]ze la ratione a concludere"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Early provenance not known. Ownership marks on fol. iiv and 1r have been crossed out in black ink; it is still possible to read: \"Capucinorum B[...]\", which refers to an unknown Capuchin convent. The following modern ownership marks are still legible: \"B.91\"; \"B.60\"; \"S. Antonino\"; \"Codice in volgare pergamenaceo met\u00e0 del sec. XV\"; \"Manoscritti: S. Antonino\", written in pencil by a 20th century hand. On f. iiv, in black ink, written by a 19th century hand: \"Quest'opera e inscrita nella Somma Teologica di S. Antonino da Firenze stampata in Verona 1740 Tomo I pagina LXXVIII n. V\"."], "500": ["Ms. codex.", "Fol. 1r-152v, title from fol. 1r; fol. 152v-158v, title supplied by cataloger, taken from the IN PRINCIPIO database.", "Collation: Paper (watermark similar, but not identical to, Briquet \"Lettre B,\" 8060-8063), fol. iii (modern paper) + 188 + iii (modern paper); 1-18\u00b9\u2070 19\u2078. Modern foliation in ink. fol. 28 is misnumbered as 29 and the error perpetuated. Fol. 186-188 are either missing or the last gathering is a misfoliated quaternion, as the foliation skips from fol. 185 to fol. 189; the last folio, numbered 190, is in fact folio 186. Vertical catchwords in the right side of the bottom margin, by the end of the scribe. Order number of the folios in the quire provided by Latin lower case letters from \"a\" to \"e\", on verso in the bottom margin. Gatherings also numbered in pencil, 20th century, with Roman numerals in the middle of the lower magin on recto. Outer bifolium in each quire strengthened with parchment stripes taken from a 13th century manuscript.", "Layout: Written in 18 long lines, below top line. Ruled with pink ink.", "Script: Written in a neat textualis libraria with cursive elements (loops and ascenders).", "Decoration: Red rubrics. Fol. 1r, red 4-line initial. Many 2-line red initial throughout the text.", "Binding: Repaired and rebound by Linda Ogden at the Robbins Collection, 2003-4; now bound in olive green leather in protective box, with marbled flyleaves. Full treatment report is on file, along with fragments of previous (not original) binding of red cloth over binder's board.", "Origin: Written in Italy, and possibly in the region of Veneto during the second half of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 28."], "300": ["|3Original: |a193 leaves :|bpaper ;|c150 x 103 (90 x 60) mm bound to 155 x 110 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-1) and positive (Robbins MS 28)"], "090": ["Robbins MS 28"], "505 8": ["Fol. 152v-158v: \"[Guillelmus de Conchis, Moralium dogma philosophorum] Honestum est quod sua vi nos attrahat et sua dignitate nos allicit. Partes honesti sunt quattuor...Incestus est cum homo cognoscit monialem vel copula carnali sibi coniunctam (?) vel aliqua affinitate propinqua. Peccatum contra naturam est cum homo effundit semem extra locum ad hoc deputatum.\"", "Fol. 158v- 168v: \"[rubr] Incipit de doctrina christiana. [text] Quilibet christianus debet prior scire Pater Noster ut possit orare, deinde debet bene adiscere Credo in Deum...Afflictos non consolari. Ammonitionibus non acquiescere. De iniurijs Deo factis non dolere. Et similia Amen.\"", "Fol. 168v-184v: \"[rubr.] Modus et ordo interrogandi in confessione observandus pulcherimus. [text] Cum ad audiendi confessiones alicuius precipue illius cuius statu ignoras et cuius vita tibi nota non est...Cor contristetur os dicat opus quam sequatur. Nec tria coniuncta delebunt crimina tota. Deo Gratias Amen.\"", "Fol. 185v-186r: \"Dixit Dominus domino meo: Sede a dextris meis donec ponam inimicos tuos scabellum...de torrente in via bibit, propterea exaltavit caput.\"", "Fol. 186r: \"[Confiteor] Confitebor tibi Domine in toto corde meo in consilio...voluntates eius.\""], "530": ["Selected digital images available in Digital Scriptorium."], "100 0": ["Antoninus,|cSaint, Archbishop of Florence,|d1389-1459."], "852 8": ["CUL|bRBCAG|hRobbins MS 28|xCIN=JKN"], "700 0": ["William,|cof Conches,|d1080-approximately 1150."], "008": ["060821q14511500it ||||||||||||00|||ita|d"], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "546": ["Italian and Latin."], "505 0": ["Fol. 1r-152r: \"[rubr.] Incipit Confessionale in vulgari fratris Antonii de Florentia ordinis Fratrum Predicatorum. [text] Omnis mortalium cura quam multiplitium studiorum...Dice santo Severio nello libro ch'il fa de la philosophica consolatione che tuta la cura et sollicitudine di mortali...fermo voto che facesseno de religione ma po esser annullato da padre or tutori se fusseno pupilli et simelmente cavati da la religione ma non dopo da la dita eta'. Amen. [rubr.] Explicit Confessionale fratris Antonii de Florentia ordinis Predicatorum.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=116;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS302": {"001": ["ocn555071012"], "110 1": ["Mexico."], "040": ["BOL|eamremm|cBOL"], "520": ["An exhaustive official report of the Fourth Provincial Council of Mexico. The council was presided over by archbishop (later cardinal) Francisco Antonio de Lorenzana, one of colonial Mexico's leading developers of ecclesiastical law. This report contains a substantial amount of theological discourse and draws heavily on Church history. Many of the suggested reforms and decisions of the council are set in the practical context of the ministry to the Indians of Mexico."], "510 4": ["Phillips, T. Cat ms.|c21283."], "245 10": ["[Official report of the fourth Provincial Council of Mexico by don Pedro de Pi\u00f1a y Marso, Fiscal del Peru]"], "099": ["Robbins MS 302"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 21283); number \"33014\" written on one of front flyleaves."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Written in 23 long lines.", "Script: Written in a single, very neat hand.", "Binding: Contemporary calf, ornate gilt-tooled cover and spine. Colored endpapers.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 302."], "035": ["(OCoLC)555071012"], "610 20": ["Catholic Church.|bProvince of Mexico City (Mexico). |bProvincial Council|n(4th :|d1771)", "Catholic Church|zMexico|xHistory|y18th century."], "650 0": ["Councils and synods|zMexico|zMexico City|xHistory|y18th", "Mexico|xChurch history|y18th century."], "260": ["[Madrid?,|cca. 1771]"], "008": ["100315s1771 sp 000 0 spa d"], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, March 2010."], "546": ["Mostly in Spanish, some Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100315054340.0"], "300": ["141 leaves :|bpaper|c295 x 205 (275 x 160) mm bound to 305 x 210 mm."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS135": {"001": ["06-B3903"], "245 10": ["Summa de casibus conscientiae ;|bConfessionale."], "505 8": ["Fol. 1r-214r: \"[rubr.] Incipit summa fratris Bartholomaei de Sancto Concordio de Pisiis ordinis Predicatorum sacre pagine professoris in qua tractat de casibus conscientiae. [text] Quoniam ut ait Gregorius super Ezechielem nullum omnipotenti Deo...tunc est invidia ut dictum est supra, invidia secundo. [rubr.] Consumatum fuit hoc opus in civitate pisana anno Domini millesimo trigentesimo trigesimo octavo de mense decembris tempore sanctissimi patris...[Word index and table of contents] Abbas Abbatissa Absolutio...et sic terminatur liber in duobus capitulis de Spiritu Sancto. Deo gratias amen. Iesus Maria.\" Fol. 214v blank.", "Fol. 215r: \"[rubr.] Incipit prologus super confessionalem fratris Iohannis Theutonici ordinis Predicatorum adiunctum de novo summe confessorum. [text] Simpliciores et minus expertos confessores de modo audiendi confessionem...expediant frequentibus admonitionibus impulsabis. [rubr.] Explicit confessionale fratris Iohannis Theutonici de ordine Predicatorum. Deo gratias amen. Iesus Maria.\""], "520": ["This manuscript comprises two major Dominican treatises on Canon Law: the first is the \"Summa de casibus conscientiae\" written by Bartolomew of San Concordio; the second text is the \"Confessionale\" of John of Fribourg. The manuscript is signed by the scribe, named 'Guilgelmus', fol. 211r: \"Qui scripsit scribat semper cum Domino vivat. Vivat in celis Guilgelmus domino felix.\" The subscription could be compared with the one in Benedictins, Colophons 5738. It is a very elegant and precious copy, without any marginal notes."], "100 0": ["Bartholomew,|cof San Concordio,|d1262-1347."], "852 8": ["CUL|bRBCAG|hRobbins MS 135|xCIN=JKN"], "700 0": ["Johannes,|cvon Freiburg,|dd. 1314."], "008": ["060817q13901425it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Silvia Donghi, August 2006."], "300": ["232 leaves :|bparchment ;|c220 x 144 (141 x 112) mm. bound to 230 x 166 mm."], "561": ["This manuscript used to belong to the Dominican convent of San Donato, near Urbino: on fol. 232 there is an ownership note by a 15th century hand which reads: \"Loci Sancti Donati prope Urbinum\". On fol. 232v, there is the number \"20041\" written in brown ink, possibly by a former owner. On fol. 1r there is a smudged ownership mark, no longer legible."], "500": ["Ms. codex.", "First title from opening rubric on fol. 1r; second title from opening rubric on fol. 215r.", "Collation: Parchment, fol. ii (modern paper) + 237 + ii (modern paper); 1-21\u00b9\u2070 22\u00b9\u2070\u207b\u00b9 23\u00b9\u2070 24\u2078. Catchwords enclosed in black and red radiating flourishes, in the middle of the bottom margin, on verso. No contemporary foliation; modern 20th century foliation in pencil in the upper corner on recto (although these modern folio numbers are inaccurate).", "Layout: Written in two columns, 45 lines for each column. Ruled in pink ink. Prickings still visible in the lower margin.", "Script: Written in a textualis libraria script, with cursive elements and very close to the humanistic script, by one scribe. Above top line.", "Decoration: Fol. 1r, a large 10-line historiated initial shows Bartolomew of San Concordio in a Dominican habit half length, facing sideways and holding a red book. The whole fol. 1r is framed with full illuminated border, painted leafy extensions and gold bezants with whiskery penwork; fol. 215, 6-line istoriated initial: the potrait of the author, in Dominican habit holding a red quill, is inscribed in the letter. Many illuminated 4-line initials throughout the text, painted in different shades of pink, blue, green, yellow. Many 3-line initials blue penworked in pink and red penworked in pink throughout the text. Red and blue alternated paragraph marks. Red rubrics.", "Binding: Modern red morocco over pasteboard, gilt edges. Title: \"A Summa de casibus conscientiae -- Confessionale\" gilt tooled on the spine. The binding was made by Marcelin Lortic, whose signature \"M. Lortic\" is gilt tooled on inside front cover. Gilt edges.", "Origin: Written in Central Italy, possibly not far from Urbino, at the very end of the 14th century or during the first quarter of the 15th.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 135."], "700 1": ["Lortic, Marcelin,|d1822-1892.|4asn|4bnd."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[Central Italy, |cbetween 1390 and 1425]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=79;fullview=yes"], "090 8": ["Robbins MS 135"]}, "RobbinsMS185": {"001": ["ocn244396261"], "260": ["Italy,|c[between 1700 and 1725]"], "040": ["BOL|eamremm|cBOL"], "520": ["A collection of documents on various matters, including on the feudal status of barons, the imposition of taxes on the use of rivers, on choosing a papal successor, on where the papal residence should be, some sermons, edicts, and a letter--tipped in at the end--about a celebration held for the placing of a church's foundation stone. Documents were not always together which is evident from the contemporary pagination throughout (fols. 1-72 were originally paginated 112-227; 230-252; fols. 73-84 were foliated 1- 12; fols. 85-95 were foliated 84-94; fols. 96-157 were foliated 125-186)."], "300": ["159 leaves :|bpaper ;|cbound to 280 x 216 mm."], "510 4": ["Phillips, T. Cat ms.|c7541."], "008": ["080825q17001725it 000 0 lat d"], "099": ["Robbins MS 185"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2008."], "003": ["OCoLC"], "245 00": ["[Collection of miscellaneous documents on legal and other matters]"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 7541)."], "500": ["Ms. documents.", "Title supplied by cataloger.", "Script: Written in at least seven hands: hand one, fol 1r- 49r; hand two, 50r-58v; hand three, 60v-71v; hand four, fol. 73r-94v and 108r-155v; hand five, 96r-107r; hand six, 156r-157r; hand seven, 158r-159v (i.e. the tipped-in letter).", "Binding: Vellum over pasteboard; spine is broken, textblock is coming loose.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 185."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "005": ["20080825043702.0"], "505 0": ["Fol. 1-49r: \"Barones status ecclesiastici presumi feudatarios et licet constat (?) non esse talis, esse tamen sub alto ac supremo dominio Sedis Apostolicae et de illius jurisdictione in eorum terris subdivisis et instantiis discursus legalis\" -- fol. 50r-58v: Document about the right of the emperor to impose taxes on the use of rivers for milling (?) -- fol. 60v-71v: \"Quaestio: Utrum Summus Pontifex habeat ius elegendi sibi successorem; Quaestio altera: An Sanctus Petrus elegerit sibi successorem Sanctum Clementem\" -- fol. 73-: \"Sermone fatto dalla S. M. di Clemente VIII nella visita della Basilica Lateranense\" -- fol. 77r-83v: \"Per Santa Maria in Trastevere\" -- fol. 86r- 90v: \"Editto: Ulpianus Archiepiscopus Theatinus Patavianus Cabillonensis Ludovicus Adriae, Antonius Casertanus, ac Alexander Heracensis episcopi visitatores a sanctissimo D. N. in Urbe eiusque districtu specialiter deputati\" -- fol. 91r- 94v: \"Editto che li regolari non possino tenere o andare in cocchio o carrozza\" -- fol. 96r-107r: \"Che il Sommo Pontefice stando in Roma pare pi\u00f9 obligato a residere appresso la chiesa di S. Pietro che in qualsivoglia altro luogo per\u00f2 in quella stagione a parte dell'anno che senza manifesto pericolo lo comporta\" -- 108r-121r: \"Scrittura che persuade esser pi\u00f9 lodevole la residenza del Sommo Pontefice nel Quirinale che nel Vaticano\" -- fol. 122r- 155v: \"Risposta ad una scrittura che persuade esser pi\u00f9 lodevole la residenza del Sommo Pontefice nel Quirinale che nel Vaticano\" -- fol. 156r-157r: \"In synodo Novogrudensi anno 1415 episcopi Rutheni sequentem epistolam scripserunt Imperatori...\" -- fol. 158r-159v: \"Relazione della funzione celebrata in Berlino per la posizione della prima pietra fondamentale della chiesa Cattolica che vi si fabbrica per la graziosa concessione di sua Maest\u00e0 il Re di Prussia\"."], "035": ["(OCoLC)244396261"], "546": ["Latin and Italian."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS6": {"001": ["06-B3083"], "245 10": ["[Decretales]"], "505 0": ["Fol. 2r-6r: Table of the titles of the Decretales; fol. 6r : \"[rubr] De peccato carnis in monialibus\"; fol. 7ra-b: \"[Decretales Gregorii IX: prologue] Gregorius episcopus servus servorum Dei dilectis filiis doctoribus et scolaribus universis parisinis commorantibus salutem et apostolicam benedictionem Rex pacificus pia miseratione disposuit...ne quis presumat aliam facere absque authoritate sedis apostolice speciali\"; 7rb-221va: \"[Decretales Gregorii IX: text] Innocentius tertius in concilio generali Firmiter credimus et simpliciter confitemur quod unus solus est verus deus...Lucius tertius Indignum est et a Romane ecclesie consuetudine alienum ut pro spiritualibus facere quis homagium compellatur\"; fol. 221va-b: Urbanus IV \"[rubr] Statutum de ingressu religionis.\""], "520": ["Contains the Decretales of Gregory IX, plus two additional short texts at the beginning (\"De peccato carnis in monialibus\") and at the end (\"Statututm de ingressu religionis.\" Articles 1, 2, and 4 were copied in the same hand after 1261, the year of the coronation of Pope Urban IV (see article 4). They are a later addition to the original manuscript, which only comprised the text of the Decretales. The hand of articles 1, 2, and 4 has also written \"Robert\" at the end of the Statutum on f. 221vb. On f. 1v, an eighteenth-century hand has written: \"Raymundi Compilatio Decretalium\" and has drawn, upside- down, and image of a masculine crowned head. Marginal notes on fol. 65r, 85v, 93r, 97r, and 201r. Marginal digits on fol. 181r-v, 201r, 203v, 213v. Folios 109v-110v ruled but blank."], "530": ["Selected digital images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=102;fullview=yes"], "100 0": ["Gregory|bIX,|cPope,|dca. 1170-1241."], "852 8": ["CUL|bRBCAG|hRobbins MS 6|xCIN=JKN"], "008": ["060630q12251275fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "240 10": ["Decretales Gregorii IX"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "300": ["|3Original: |a221 leaves :|bparchment ;|c143 x 103 (106 x 71) mm bound to 150 x 110 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-15) and positive (Robbins MS 6)"], "561": ["Early provenance not known. Bookplate on inner front cover : \"Ex libris P. J. D. de Richardot Domini de Choisey.\" On fol. iir: \"Manuscrit du XIVe si\u00e8cle,\" in pencil, in a twentieth-century hand. The manuscript was part of the original collection assembled by Lloyd Robbins."], "500": ["Ms. codex.", "Title supplied from spine.", "Collation: Collation indiscernible due to tightness of binding.", "Layout: Main text of the Decretales (fol. 7ra-221va) written in 2 columns of 45 lines each. Table of the titles of the Decretales (fol. 2r-6r) and the brief text \"De peccato carnis in monialibus\" (fol. 6r) written in 25 long lines. Brief text at the end (fol. 221va-b) \"Statutum de ingressu religionis (Urban IV) layed out in 2 columns. Main text frame ruled in lead; table of contents plus short texts at beginning and end ruled in ink. Prickings visible at the beginning of text (fol. 1-6).", "Script: Main text of the Decretales (fol. 7ra-221va) written in a Gothic script by one hand. Table of the titles of the Decretales (fol. 2r-6r), the brief text \"De peccato carnis in monialibus\" (fol. 6r), and the brief text at the end (fol. 221va-b) \"Statutum de ingressu religionis (Urban IV) in a second hand.", "Decoration: Illuminated initials at the beginning of each part of the text. At the very beginning of the Decretales (fol. 7r) is an historiated inital depicting Raymond, of Pe\u00f1afort giving the five books to Gregory IX. Fol. 61v, 111r 159r, and 175r are figures of animals painted in red and white on a blue background. Floral borders between columns. Capital letters, paragraph marks and line-fillers in alternating red and blue with flourishes in other color. Titles in red.", "Binding: 18th century, light-colored leather binding with gold lines delineating the borders of the front and back covers; gilt edges; title on spine reads \"Compilati Decretali Man\u016b scripta\" in gold letters on red background. Marbled endpapers. Codex stored in a modern box with title : \"Decretales 13th Cent.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 6."], "090 8": ["Robbins MS 6"], "260": ["[France,|cbetween 1225 and 1275]"], "581": ["Stephan G. Kuttner et al., A Catalogue of Canon and Roman Law Manuscripts in the Vatican Library, 2 vols. (Vatican: Biblioteca Apostolica Vaticana, 1986-87), 1:139, 156-7, 158-9, 160-61, 165, 168, 169-70, 171, 172-3, 174, 175-7, 178-9. For early printed editions, see Gregorius IX, Decretalium Gregorii Pape IX compilatio, multis vtilibus et ferme necessariis, adiuctis examussim castigata (Lugduni: J. Marechal, 1510); id., Decretales domini pape Gregorii noni accurata diligentia nuper emendate summoque studio elaborate ... (Parisijs: solerti cura Tiemanni Keruer, 1516); id., Decretales a Gregorio nono in volume hoc redacta (Ticini: per Jacob Paucidrapense de Burgofranco, 1517); id., Gregorii Noni Pontificis Maximi Decretales epistole ab innumeris penemendis cum textus, tum glossarum repurgate quarum casibus superaddita sunt brevissimi Bernardi glossatoris notabilia, nunc primum in lucem edita (Parisijs: apud Jolanda Bonhome, 1547); id., Decretales Domini Gregorii Papae IX suae integritati una cum glossis restitutae cum privilegio Gregorii XIII Pont. Max. et aliorum principum, Corpus iuris canonici 2 (Romae: In Aedibus Populi Romani, 1548)."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS194": {"090": ["Robbins MS 194"], "001": ["ocn908406080"], "245 10": ["De componendis datariae debitis|bDefensio composita sub pontificatu sa[crae] me[moriae] Urbani Papae VIII."], "040": ["BOL|eamremm|cBOL"], "520": ["A treatise, written by Pietro Ottoboni (who later became a cardinal and thereafter Pope Alexander VIII) concerns the Apostolic Dataria, one of the five offices of the Roman Curia. The Dataria was in charge of granting benefices and spiritual favors, typically in exchange for money. Ottoboni lays out the arguments for and against charging for the practice and comes to the conclusion that it is right to do so. Beginning on fol. 21r there is a discussion of historical events involving taxation by popes. The dates of those events are written in the margin using a similar ink and script to that used in the rest of the manuscript. A note on the bottom of fol. 1r, in a different hand than that of the rest of the manuscript, reads \"Auctor est eminentissimus (?) Ottobonus et antequam esset sanctae Rotae auditor haec scripsit.\""], "100 0": ["Alexander|bVIII,|cPope,|d1610-1691."], "260": ["Rome,|cbetween 1650 and 1699."], "008": ["150505q16501699it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez, February 2012."], "581": ["Dictionnaire d'histoire et de g\u00e9ographie eccl\u00e9siastiques, Paris: L\u00e9touzey et An\u00e9, 1912, 245-46."], "546": ["In Latin."], "003": ["OCoLC"], "561": ["Once in the library of Sir Thomas Phillipps; now disbound from his MS 7598."], "500": ["Ms. codex.", "Title transcribed from title page (fol. 1r).", "Layout: Written in 30 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: Disbound", "Watermark is similar to Briquet etoile 6089 (Lucca, 1587- 88; Fabriano, 1585) but with the initial \"R\" above it. Such watermarks were used throughout southern Italy in the 17th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law, Robbins MS 194."], "852": ["CU-L|dRBCAG|xCIN=jkn"], "005": ["20150505021244.0"], "LEADER": ["00000ntm a2200337Ia 4500"], "035": ["(OCoLC)908406080"], "300": ["|3Original:|a33 leaves :|bpaper ;|c265 x 195 (245 x 140) mm."]}, "RobbinsMS126": {"001": ["ocn180147655"], "245 10": ["Facultates concess[a]e minoribus poenitentiariis basilic[a]e Divi Petri in Vaticano :|bex earum tabella desumpt[a]e ad usum p[o]enitentiariorum extraordinariorum eiusdem basilic[a]e."], "040": ["BOL|eamremm|cBOL"], "520": ["A text related to the minor penitentiaries of the Basilica of St. Peter. The text includes instructions for dealing with heretics and schismatics, as well as others."], "260": ["Rome,|cDecember 20, 1763."], "008": ["071031s1763 it 000 0 lat d"], "099": ["Robbins MS 126"], "505 0": ["Fol. 3r-19r: \"[text] R[everendissimi] patres poenitentiarii Domini Nostri Pap[a]e apud Sanctum Petrum a Nobis deputati, poterunt in foro conscienti[a]e, et per se ipsos tantum absolvere quascumque personas eisdem confitentes...Demum sciant esse ipsis prohibitum, super quacumque irregularitate it inhabilitate, et quocumque alio impedimento matrimoniali dispensare. Libellus hic diligenter in Sede Confessionali perpetuo asservetur. Ex Sacra Aenitentiaria apostolica die 20 Decembris 1763, A. A. Cardi. Galli, M.P.\""], "100 1": ["Galli, Antonio Andrea."], "003": ["OCoLC"], "546": ["Latin."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["Purple, illegible, library stamp (fol. 1 r); comments on the text (fol. 19r) are signed by J. J. Bussi, May 1821, at the tribunal of the Sacred Penitentiaria."], "500": ["Ms. codex", "Title from title page (fol. 2r)", "Layout: Written in 12 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: Vellum over pasteboard with red printed pastedowns.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 126."], "583": ["Cataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, October 2007."], "005": ["20071101040825.0"], "LEADER": ["00000ntm 2200000Ii 4500"], "035": ["(OCoLC)180147655"], "300": ["|3Original:|a22 leaves :|bpaper ;|c211 x 154 (161 x 105) mm bound to 217 x 157 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-04) and positive (Robbins MS 126)"]}, "RobbinsMS98": {"001": ["ocn759003220"], "245 10": ["Declarationes Sacri Concilij Tridentini."], "040": ["BOL|eamremm|cBOL|dBOL"], "852": ["BOL|bRBCAG|xCIN=JKN"], "110 2": ["Catholic Church.|bCuria Romana"], "260": ["Italy,|c1700s"], "099": ["Robbins MS 98"], "246 2": ["Declarationes Sacri Concilii Tridentini"], "581": ["Collectio declarationum Sacrae Congregationis Cardinalium Sacri Concilii Tridentini Interpretum, ed. Giovanni Zamboni. 4 vols. Arras: Rousseau-Leroy, 1860-68."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Provenance: Old library stamp bearing the initials \"AS\" on spine."], "500": ["Ms. codex.", "Title from fol. 1r", "Layout: Writte in long lines, 18 lines per page; ruled.", "Binding: Limp vellum, deteriorated; remains of leather tiles. Title on spine: \"Declarationes Conc.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 98."], "300": ["|3Original:|a386 leaves :|bpaper ;|c200 x 130 (165 x 90) mm bound to 200 x 130 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-80) and positive (Robbins MS 98)"], "505 8": ["Fol. 359r-386v: \"[title] Compendium Sacri Concilii Tridentini\" \"[text] Prima 2a et 3a La prima 2a et 3a Sessione dispongono gli animi a vivere riligiosamente et recitare il Credo...Fu confirmato questo Concilio da Papa Pio 4o nell'nno 1564.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=60;fullview=yes"], "008": ["111028q17001799it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts, October 2011."], "546": ["Latin and Italian"], "003": ["OCoLC"], "005": ["20111031125629.0"], "505 0": ["Fol. 1r-356r: [Curia Romana, Sacra Congregatio Concilii Tridentini] \"[title] Declarationes Sacri Concilij Tridentini\" \"[text] In Bulla Pii 4. Confirmationis Concilii in illis verbis Cultumve [?] omnino interpretationis genus propter ista verba...Episcopo leodiensis qui quisivit, an publicatio Conc. Trid. facta in urbe liget leodiensis ubi nec Eodie per Capitulum publicatum fuit Rt. Congregatio ligare.\""], "035": ["(OCoLC)759003220"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS157": {"001": ["06-B4182"], "245 10": ["Statuta cleri Romani in meliorem formam redacta /|cab ill[ustrissi]mo et r[everendissi]mo d[omi]no Iosepho Simonetti e[minentissi]mi et r[everendissi]mi cardinale Urbis Vicarii in civilibus locumtenente."], "505 8": ["Fol. 1r-51v: [Statuta cleri Romani in meliorem formam redacta] ; fol. 1r \"[title] Statuta cleri Romani in meliorem formam redacta ab illustrissimo et reverendissimo domino Iosepho Simonetti eminentissimi et reverendissimi cardinale Urbis Vicarii in civilibus locumtenente\" ; fol. 1v: blank ; fol. 2r-7r: \"[text] Tit. De cleri camerario. Cap. 1. De eligendo cleri camerario. In primis statuimus et ordinamus...ex pari consuetudine sibi debitum prestabit\" ; fol. 7r-51v: \"[text] Tit. De funeribus et sepulturis. Cap. primo. De iure eligendi sepulturam. Sacrorum canonum decreta sicuti statuimus...eiusque domini (?) vicesgerentis ibidem comminatis puniantur\" ; fol. 52rv : blank."], "520": ["Statutes of the Roman Curia."], "300": ["52 leaves :|bpaper ;|c274 x 196 (244 x 100) mm bound to 280 x 205 mm."], "510 4": ["Phillipps, T. Cat. ms.,|c5334."], "852 8": ["CUL|bRBCAG|hRobbins MS 157|xCIN=JKN"], "008": ["060829q17501799it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "100 1": ["Simonetti, Giuseppe."], "561": ["Bookplate of Frederick North, Earl of Guilford on front pastedown (depicts a shield supported by two dragons rampant with spread wings, gorged and chained, with an earl's crown; within the shield is a lion surrounded by three fleurs-de-lis; the motto reads \"La vertu est la seule noblesse\"). Manuscript was once in the collection of Sir Thomas Phillipps (his no. 5334). Written in modern pencil on the front end paper is \"Bylaws of the Curia late 18c [---] 4/81.\""], "500": ["Ms. codex.", "Title from title page (fol. 1r).", "Collation: Paper (watermark depicts a bird atop a trimontium all enclosed within a circle with a cross above), fol. 52 + i; 1-4\u00b9\u00b2 5\u00b2; catchwords at the end of each page.", "Layout: Written in 26 long lines; vertical bounding lines made by folding.", "Script: Written in a cursive script by one hand.", "Decoration: Title is written in a combination of 4-line capital letters with pen flourishing and 2-line lower-case letters, all bold lettering. Centered at the tail edge of the title page is a decorative element with curving lines and curlycues.", "Binding: Vellum over pasteboard; continuous endsheets and pastedowns. On spine is the title \"Statuta Cleri Romani ms.\" written in gold lettering on a green leather background. The Phillipps ms. number 5334 is printed on a small label affixed to base of spine.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 157."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["Rome,|c[between 1750 and 1799]"], "090 8": ["Robbins MS 157"]}, "RobbinsMS96": {"001": ["ocn759597136"], "245 10": ["In libros IV Institutionum Imperatoris Iustiniani explicationes verborum et rerum."], "040": ["BOL|eamremm|cBOL"], "003": ["OCoLC"], "260": ["Italy,|c[between 1725 and 1775]"], "008": ["111104q17251775it 000 0 lat d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "505 0": ["Fol. 1r-112r: \"[text] Imperatori rite ac veste rempublicam moderaturo, non arma modo, verum etiam legum praesidii...Durante controversia impenditur administratio, morte tollitis inquisitio ut paratis defuncti.\""], "100 1": ["Becelli, Giulio Cesare,|d1683-1750."], "546": ["Latin."], "099": ["Robbins MS 96"], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Gift of Phoebe Hearst to the UC Berkeley Library (note on front pastedown)."], "500": ["Ms. codex.", "Title from title page (fol. ivr).", "Layout: Written in long lines; 23 lines per page; ruled.", "Script: Marginal annotations in the hand that copied the manuscript. Some marginal notes are in Greek. One marginal note reads \"Piraee quoniam incertum est qualis...,\" which is a quotation from Odyssey 17.78.", "Decoration: Gold lettering on title page.", "Binding: Dark leather with gilt decorations on front and back; five raised bands on spine; title on spine reads: \"Iustin. Inst.\" Red-edged paper label on spine with old shelfmark: \"Mss. 292k B389.\"", "Note on title page reads: \"Tradebat Julius Caesar Becellius. Excipiebam ego Nerius Tosi.\" The author of the work is most likely Giulio Cesare Becelli (1683-1750), a Jesuit (who later left the order), noted Veronese humanist, and the author of several works of literary criticism (Della novella poesia, cio\u00e8, Del vero genere e particolari bellezze della poesia italiana, libri tre [Verona: Per Dionigi Ramanzini, 1732]; Esame della retorica antica e uso della moderna, libri VII [Verona: 1735]). Becelli wrote a book on tending to a library (De biblioteca instituenda ac ordinanda liber [Veronae: apud J. A. Tumermanum, 1747]), published translations of Herodotus (Le nove muse: istoria delle imprese de'Greci e de'barbari, volgarizzata da Giulio Cesare Becelli), and authored a poem (Il Gonnella), a tragedy (Oreste), and several comedies.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 96."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Ana E. Enriquez, October 2011."], "005": ["20111104102921.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)759597136"], "300": ["|3Original:|a112 leaves :|bpaper ;|c240 x 170 (180 x 115) mm bound to 250 x 180 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-79) and positive (Robbins MS 96)"]}, "RobbinsMS153": {"001": ["ocn768895687"], "245 10": ["Actorum sacri pontif[icis] et amplissimorum cardinalium senatus diaria adnotatio."], "040": ["BOL|eamremm|cBOL"], "520": ["Acta of the Papal Consistory compiled by Julius Antonius Santorius (Guilio Antonio Santori, 1532-1602), archbishop of Santa Severina. The first entry is that of 17 May 1570, the consistory during which Santori was made a cardinal. The latest entry is 6 March 1599. Two earlier entries are inserted in the middle of the text: 14 December 1558 and the first entry under Pope Pius V, in 1566. The ink is causing some browning of the paper, but there is no loss of text."], "110 2": ["Catholic Church."], "260": ["Italy,|c[between 1570 and 1599]"], "099": ["Robbins MS 153"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Front pastedown reads \"A-2 / Sanctorius\" in pencil in later hand (\"Sanctorius\" refers to Giulio Antonio Santori, Cardinal Santa Severina, who likely created this compilation). Pencil markings in bottom right corners of some rectos."], "500": ["Ms. codex.", "Title transcribed from folio 1r.", "Collation: Paper (at least two watermarks visible: one is similar, but not identical, to Briquet croix grecque 5576 (Naples, 1468), but with a Maltese cross, and the other to Briquet oiseau 12250 (Rome, no date) or 12251 (Salerno, 1590), fol. 514.", "Layout: Written in long lines, 21 lines per page.", "Binding: Parchment over pasteboard. Upper left of front cover has \"201\" written in pencil in a later hand. Some marginal notes are partially cut off, suggesting manuscript was cut down at some point.", "Origin: Manuscript was likely prepared by Giulio Antonio Santori (1532-1602), Cardinal Santa Severina, or copied from another manuscript he prepared. The title page includes an introductory paragraph by him, and the beginning of the manuscript coincides with his creation as a cardial.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 153.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 184."], "300": ["|3Original:|a514 leaves :|bpaper ;|c260 x 190 (220 x 150) mm bound to 273 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS 153)"], "610 20": ["Catholic Church|xHistory|xSources."], "700 1": ["Santori, Giulio Antonio,|d1532-1602."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=89;fullview=yes"], "008": ["111220q15701599it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez, November 2011."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20111220030247.0"], "505 0": ["Fol. 1r: \"Actorum Sacri Pontif[icis] et Amplissimorum Cardinalium Senatus Diaria Adnotatio\" (title and introductory paragraph by Santori) -- fol. 1v-99v: Acta of 17 May 1570 through 6 February 1572 -- fol. 100r-317v: acta of 17 October 1572 through 13 December 1578 (\"Incipiunt Consistoria Gregorii XIII\") -- fol. 318r: Acta of 14 December 1558 [recto] -- fol. 318v-321r: \"Pii V in Summum Pontificem electi, habitus in prima Congregatione Generali / 1566\" [verso + 3] -- fol. 325r-331v: Acta of 4 January 1579 through 30 January 1579 -- fol. 332r-423r: acta of 7 February 1579 through 18 December 1581 (\"Acta Consistorialia / annorum / 1579, 1580, 1581\") -- fol. 423v -474v: acta of 9 January 1589 through 4 December 1591 (\"Acta Consistorialia / annorum / 1589, 1590, 1591\") -- fol. 475r-512r: acta of 14 February 1592 through 6 March 1599 (\"Acta Cons[is]torialia / annorum / 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599\"). After the 6 March 1599 entry, there is an entry dated 8 January 1590."], "035": ["(OCoLC)768895687"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS59": {"001": ["ocn464654551"], "245 10": ["Nova facultatum maiori poenitentiario concessarum collectio /|cemin[entissi]mi et rev[erendissi]mi domini d[omini] cardinalis Ludovisii m[aioris] poeni[ten]tiarii iussu."], "040": ["BOL|eamremm|cBOL"], "003": ["OCoLC"], "510 4": ["Phillips, T. Cat ms.|c7374."], "260": ["Italy,|c1651"], "008": ["091110s1651 it 000 0 lat d"], "099": ["Robbins MS 59"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, November 2009."], "100 1": ["Ludovisi, Ludovico,|d1595-1632."], "546": ["Latin."], "520": ["A summary, in twelve sections (tituli), of faculties or dispensations granted to the Grand Penitentiary of the Curia Romana. Beginning on fol. 74 is an index of faculties."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 7374)."], "500": ["Ms. codex", "Title from title page (fol. 1r).", "Collation: Paper, fol. i + 94 (last folio is pastedown); 1\u2078 2\u00b9\u00b2 3\u00b9\u2070 4\u00b9\u00b2 5\u2078 6\u00b9\u00b2 7\u2076 8\u00b9\u2070 9\u2076 (+2) 10\u2078.", "Layout: Written in 22 long lines.", "Script: Written in a fairly neat cursive script by one hand.", "Binding: Parchment over pasteboard. Title on spine reads \"Facult Poenitij M.S. XLI.\"", "Origin: From the title it is clear that this collection was ordered by Cardinal Ludovico Ludovisi and then executed on after his death by his cousin Cardinal Niccol\u00f2 Albergati-Ludovisi in 1651.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 59."], "700 1": ["Albergati-Ludovisi, Niccol\u00f2,|d1608-1687", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL"], "005": ["20091110124338.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)464654551"], "300": ["|3Original:|a94 leaves :|bpaper ; 218 x 150 (185 x 120) mm, bound to 224 x 157 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-57) and positive (Robbins MS 59)"]}, "RobbinsMS211": {"090": ["Robbins MS 211"], "001": ["ocn905556284"], "245 10": ["Question regarding dissolution of marriage between Francesco de Albergatis and Countess Teresa Orsi."], "040": ["BOL|eamremm|cBOL|dBOL"], "505 8": ["Fol. 1r-36v: \"[text] Bononiensis matrimonii stantibus. Dubium an sit locus dissolutioni matrimonii in casus. Beatissime Pater. Celebratum fuit die 18 Februarii anni 1748 matrimonium in faciem ecclesiae inter nobiles marchionem Franciscum nunc senatorem de Albergatis...et comitissam Theresiam Orsi...propter quod locus etiam sit dissolutionis huius matrimonii, sancta beataque relicta libertate alias feliciores nuptias contrahendi ut denuo obsequentissime supplicamus quare (?) Jacobus Santagata.\""], "003": ["OCoLC"], "300": ["|3Original:|a36 leaves :|bpaper ;|c265 x 195 (240 x 140) mm bound to 275 x 200 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) & positive (Robbins MS 211)"], "008": ["150324q17501799it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, March 2015."], "100 1": ["Santagata, Giacomo|eauthor."], "546": ["In Latin."], "520": ["A question to the Roman curia (\"Beatissime Pater\"), brought by Giacomo Santagata, regarding dissolution of marriage between Francesco de Albergatis and Countess Teresa Orsi, who were married 18 February 1748."], "852": ["CU-L|dRBCAG|xCIN=jkn"], "561": ["Manuscript was once in the collection of Sir Thomas Philipps (his no. 5447)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. i + 36 + 1; 1-6\u2076.", "Layout: Written in 20 long lines by one hand, leaving an ample (50 mm) right margin.", "Script: Written in a neat cursive script.", "Binding: Marbled paper over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law, Robbins MS 211."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "005": ["20150324042812.0"], "035": ["(OCoLC)905556284"], "LEADER": ["00000ntm 2200349Ia 4500"]}, "RobbinsMS195": {"001": ["ocn908406266"], "245 10": ["Letter from Antonio Caetani to Scipione Borghese, 1613 September 22 ;|bDraft letter from Scipione Borghese to Bernardo Sandoval y Rojas."], "040": ["BOL|eamremm|cBOL"], "520": ["The first two leaves are a letter from Antionio Caetani, Archbishop of Capua and papal nuncio to Madrid, to Cardinal Scipione Borghese. The letter concerns Jeronimo de Zeballo's work, Speculum aureum opinionum. The third leaf is a draft of a letter from Cardinal Scipione Borghese to Bernardo de Sandoval y Rojas, Archbishop of Toledo and Inquisitor General, thanking Sandoval for sending a list of prohibited books and also discussinb Zeballo's work. The fourth leaf is blank. Fol. 2v bears the seal of the Archbishop of Capua (paper seal attached with red wax)."], "300": ["4 leaves :|bpaper ;|c290 x 200 mm."], "008": ["150505q16131620sp 000 0 ita d"], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez and Jennifer K. Nelson, March 8, 2012."], "100 1": ["Caetani, Antonio, 1566-1624."], "003": ["OCoLC"], "546": ["In Italian"], "099": ["Robbins MS 195"], "852": ["CU-L|dRare|xCIN=jkn"], "561": ["This letter was formerly in the collections of Frederick North, 5th Earl of Gilford, and of Sir Thomas Phillipps, his 6207."], "500": ["Ms. document.", "Title supplied by cataloger.", "Binding: Unbound leaves.", "Origin: The letter was written by Antonio Caetani in Madrid on 22 September 1613. It seems to be original because the verso of the second folio of the letter bears the recipient's address and Caetani's seal. The draft letter (fol. 3r-v) is an autograph of Borghese, and it concerns the same book of Zeballo, which was published in 1613.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law, Robbins MS 195"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "005": ["20150505021628.0"], "035": ["(OCoLC)908406266"], "LEADER": ["00000ntm a2200313Ia 4500"]}, "RobbinsMS65": {"001": ["ocn690936445"], "245 10": ["[Supplementum summae magistreutiae seu pisanellae]"], "040": ["BOL|eamremm|cBOL|dBOL"], "003": ["OCoLC"], "650 0": ["Christian ethics|xCatholic authors.", "Confessors|vHandbooks, manuals, etc."], "100 0": ["Nicholas,|cof Osimo,|d-1453"], "260": ["Italy,|c[between 1450 and 1499]"], "008": ["101209q14501499it 000 0 lat d"], "099": ["Robbins MS 65"], "246 0": ["Supplementum summae magistratiae seu pisanellae", "Supplementum summae pisanellae"], "LEADER": ["00000ntm 2200000Ia 4500"], "546": ["In Latin."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment; fol. iv (modern paper) + 301 + iv (modern paper); 1\u00b9\u2070 2\u00b9\u00b9 3-30\u00b9\u2070; catchwords at the end of each quire, decorated by four little crosses.", "Layout: Written in 2 columns of 41 lines; ruled in lead.", "Script: Written in a gothica semitextualis script, below top line, possibly by three hands (1: fol. 1r-62v; 2: fol. 63r-v; 3: fol. 64r-301v).", "Decoration: 5-line intitial in blue with red and green infill on gold ground. Section heading initials in alternating red and blue throughout.", "Binding: Modern binding (was previously bound in a velvety leather on wooden boards with partial vellum covering on spine, three missing clasps, and front cover nearly detached). Old binding had a paper label affixed to back cover (probably a 16th or 17th-century library shelf mark) that read: \"Suplementum scriptum manu su...[legi non potest] 9ni 38. Coperta alba\"; title on old spine was \"Manoscritto in Pergamena.\" Formerly stored in a box of natural linen with brown leather spine and two clasps, with title on spine of box: \"Bartholomaeus Pisanus de Sancto Concordio. Pisanella seu Magistrutia. Manuscript. Italy 15thcentury.\" Full conservation report in manuscript file.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 65."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts and Jennifer K. Nelson, December 2010."], "005": ["20101209020755.0"], "505 0": ["Fol. 1r-299r: \"[text] Quoniam summa que magistreutia seu pisanelle ulgariter [sic] nuncupatur propter eius compendiositatem...Et hic zelus me fratrem Nicholaum d'Ausimo ordinis minorum indignum pro aliquali simpliciorum subsidio ad huius supplementi compilationem. Quod fauente domino nostro Yhesu Christo excepta tabla capitulorum et abbreviaturarum et rubricarum expletum est\" -- fol. 299r-301v: \"[tabula capitulorum] Abbas, Abatissa...Professio...Promissio, Prudentia.\""], "035": ["(OCoLC)690936445"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=37;fullview=yes"], "300": ["|3Original:|a301 leaves :|bparchment ;|c225 x 160 (150 x 110) mm, bound to 239 x 163 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-58) and positive (Robbins MS 65)"]}, "RobbinsMS55": {"001": ["ocn503339616"], "260": ["Italy,|c[between 1675 and 1699]"], "040": ["BOL|eamremm|cBOL"], "520": ["The first text in this collection contains summary information of the assembly of archbishops and bishops of France held in Paris, with the authority of King Louis XIV, for the purpose of establishing the rights of the Gallican Church and their prelates against the encroachments of Pope Innocent XI. Bishop of Meaux, Jacques-B\u00e9nigne Bossuet , was present throughout the sittings of the assembly."], "510 4": ["Phillips, T. Cat ms.|c18778."], "099": ["Robbins MS 55"], "245 00": ["[Collection of documents on the conflict between Innocent XI and the Gallican Church]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 18778); large number 8 written on base of spine; small circular sticker with the number 712 on upper spine."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Written in long lines.", "Script: Written in at least five hands.", "Bound in parchment over pasteboard. \"Misce. M.S.\" written on spine.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 55."], "035": ["(OCoLC)503339616"], "610 20": ["Catholic Church|zFrance."], "505 0": ["Fol. 1r-37r: \" \"Sommaria informatione dell'Assemblea Straordinaria de' Monsignori Archivescovi e Vescovi, tenuta nell'Arcivescovato di Parigi, ne' i mesi di Marzo, e di Maggio, 1681\" -- fol. 40r-42r: \"Atto di protesta del Reverendo Prete Cerles Vicario Generale della Chiesa di Pamiers contro l'Assemblea Generale del Clero intimata per il primo giorno d'ottobre prossimo\" -- fol. 44r-45r: Anonymous letters on the protest -- fol. 46r-49r: \"Atto di protesta del Reverendo Padre Cerle Vicario Generale della Diocesi di Pamies (sic) in sede vacante confermato dalla Sede Apostolica contro l'Assemblea Provinciale di Tolosa intimata alle [unclear] del prossimo Agosto, e contro l'Assemblea generale del Clero intimato il primo del prossimo Ottobre\" -- fol. 50r-207v: \"Ponderazioni sopra gli affari della Chiesa che devono essere proposti nella prossima Assemblea Generale del Clero di Francia dirette ad un Vescovo di quell'Assemblea. MDCLXXXI (1681).\""], "650 0": ["Gallicanism."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "008": ["100203q16751699it 000 0 ita d"], "583": ["|zCataloged from existing description and in hand by Pamela Diaz and Jennifer K. Nelson, February 2010."], "546": ["Italian."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100203045306.0"], "300": ["|3Original:|a207 leaves :|bpaper ;|c265 x 205 mm bound to 275 x 205 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-53) and positive (Robbins MS 55)"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS272": {"001": ["06-B3689"], "245 10": ["[Mishneh Torah (ha-yad ha-hazaqah)]"], "505 0": ["Fol. 1-105: Sefer Nezikin (Book of Torts), Book 11 of the Mishneh Torah (text starts in the middle of chapter 2, halacha 1; fol. 3 starts from chapter 5, halacha 3) ; fol. 106b-183: Sefer Kinyan (Book of Acquisitions), Book 12 of the Mishneh Torah ; fol. 184-330: Sefer Mishpatim (Book of Civil Laws) and Sefer Shoftim (Book of Judges), Books 13 and 14 of the Mishneh Torah."], "520": ["Compilation of three different, incomplete, late 15th and early 16th century Yemenite manuscripts of parts of books 11-14 of the Mishneh Torah by Moses ben Maimon (Maimonides). These manuscripts have been bound together, with missing parts supplied from leaves or quires from other Yemenite manuscripts (most also dating from the 15th to the 16th centuries, but some earlier or later, and some even filled in by 19th and 20th century hands). In the second part of the manuscript (Book of Acquisitions, fol. 106b-183), some text is missing, especially towards the end. A few folios are late completions (20th cent.) and some belong to another early Yemenite manuscript added to this volume to complete the text. The third part of the manuscript (Book of Civil Laws and Book of Judges, fol. 184-330) was incomplete, and although some text is still missing, much of the text was supplied by folios from an earlier, perhaps 14th cent., manuscript that were bound in wherever large sections of the text were missing. A few folios were supplied from another early Yemenite manuscript and some are 20th cent. completions. Some leaves damaged, torn or repaired throughout."], "300": ["330 leaves :|bpaper ;|c266 x 190 (195 x 125) mm bound to 273 x 122 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 272|xCIN=JKN"], "008": ["060803q14901950ye ||||||||||||00|||heb|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "581": ["Beit-Ari\u00e9, Malachi and Colette Sirat in Manuscrits m\u00e9di\u00e9vaux en caract\u00e8res h\u00e9bra\u00efques : portant des indications de date jusqu'\u00e0 1540 (Jerusalem-Paris), vol. I , no. 163."], "546": ["Hebrew."], "100 1": ["Maimonides, Moses,|d1135-1204."], "561": ["The manuscript from which the colophon of the second part was detached (Book of Acquisitions, fol. 106b-183) was copied in the town of Suda in Yemen for Yeter ha-Levi ben Kokhav ha-Levi. Manuscript once belonged to Rabbi Yihya Kapach (Kafich)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (glossy oriental, Yemenite), fol. 330 (fol. 184 counted twice).", "Script: Written in various large square Yemenite hands.", "Decoration: Some headings of sections and paragraphs outlined in red ink.", "Binding: Modern cloth and quarter-leather binding over pasteboard; modern flyleaf and pastedown both front and back.", "Origin: According to the colophon on fol. 105v the first part of the manuscript was copied by Khalaf ben Daoud (Chjalfon ben David) al-Tawili in the town of Tawil in 1820 Seleucid era (1508 or 1509). At the bottom of fol. 184r there is a short colophon with the date Tuesday 19 Ellul 1802 Seleucid era (1491); at the top of the same folio there is a faint colophon, now mostly written over, with the name of the scribe Shelomo (Solomon) ben David ben Maimon al-Tawili, dated Thursday 27 Ellul of the same year.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 272."], "583": ["|zCataloged from existing description and in hand by Saul Friedman and Jennifer K. Nelson, August 2006."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["Yemen,|c[between 1490 and 1950]"], "090 8": ["Robbins MS 272"]}, "RobbinsMS92": {"001": ["ocn660897998"], "260": ["England,|c[between 1625 and 1675]"], "040": ["BOL|eamremm|cBOL"], "003": ["OCoLC"], "300": ["|3Original:|a253 leaves :|bpaper ;|c275 x 170 (195 x 105) mm bound to 285 x 175 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-75) and positive (Robbins MS 92)"], "008": ["100903q16251675enk 000 0 eng d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["A treatise of the high court of Starr Chamber :|bdivided into 3 parts, vizt, the first conteyninge vi consideracons concerninge the court it selfe, the judges, officers & ministers thereof ; the second conteyninge xvii consideracons concerninge the jurisdiction of the court and the causes which are there handled & properly determinable; the third and last conteyning xxvi considerations concerninge the course of the same court in what forme causes are proceeded in and there determined."], "099": ["Robbins MS 92"], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Presented by S. P. Avery to the Grolier Club in New York City at an unspecified date (Grolier Club's no. 1946 is written in top left-hand corner of the verso of first flyleaf). S. P. Avery's bookplate (verso of front cover) bears a red stamp \"Withdrawn Grolier Club Library.\" Thereafter it was in the possession of one Alan G. Thomas."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper, fol. iiii (modern paper) + 253 (foliation skips title page and table of contents and begins at the prologue) + iiii (modern paper); gatherings difficult to discern due to tighness of binding.", "Layout: Written in 22-24 long lines; catchwords at the end of each page.", "Script: Written in a cursive script by one hand.", "Binding: Brown leather, tooled, gilt decoration on the inside covers; front cover detached; raised bands on spine, five compartments. Title on spine in gilt letters reads \"Treatise of Starr Chamber.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 92."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2010."], "005": ["20100903043708.0"], "505 0": ["Fol. ir: Title page -- fol. iv-iiv: blank -- fol. iiir-vv: Table of contents -- fol. 1r-2v: Prologue \"[text] I cannot but with admiration reverence the grave judgment of the sages of the common lawe of England...for that no man heretofore hath ever taken any permit or regard to make observation of the same, more than for his owne private use or particular practise\" -- fol. 3r-54r: Book 1 \"[text] In this first part of this Treatise, concerning the Court of Starchamber (sic), I will content my selfe to handle among other things which might fittly be debated these fewe heads... I shall obteyne ad summam votorum meorum, pervenisse videbor. Finis partis primis\" -- fol. 54v: blank -- fol. 55r-135v: Book 2 \"[text] \"Being in the second part of this treatise to handle the jurisdiction of this great high Court...to the discretion of the grave and judicious moderator of this great and honorable presence. Libri Secundi Finis\" -- fol. 136rv: blank -- fol. 137r- 248v: Book 3 \"[text] Being in the last place, to intreat of the sourse of this high Court it is fit before I make particular relation...cum omnia breve in memoria et in nullo errare divinum sed potius quam humanum. Bracton (i.e. De legibus et consuetudinibus Angliae) Fo. 1 Cap. 1. Finis\""], "035": ["(OCoLC)660897998"], "546": ["In English."], "610 10": ["England.|bCourt of Star Chamber."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS140": {"001": ["ocm84650673"], "260": ["[Barcelona?,|c1422]"], "040": ["CUL|eamremm|cCUY"], "520": ["This manuscript contains some transcripts from a trial which took place in 1422 near Barcelona, in the church dedicated to the saints Iustus and Pastor. The manuscript is incomplete. Among the people cited in the transcripts, the legible names are: Petro Pujada, Bernardus Benjal, Guillelmus Cortinna, Franciscus Bugatelli."], "300": ["|3Original:|a192 leaves :|bpaper;|c225 x 150 (155 x 90) mm bound to 215 x 155 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-11) and positive (Robbins MS 140)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=82;fullview=yes"], "008": ["060818s1422 sp 000 0 lat d"], "099": ["Robbins MS 140"], "003": ["OCoLC"], "245 00": ["Processus cappellaniae Sancti Ivonis in ecclesia Sanctorum Iusti et Pastoris cuius patroni sunt magnifici domini nobilis Geronimus de Argensola et Iohannes Baptista Cassador et de Aguilar. In Curia Ecclesiastica Barcinonae."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title from the front cover.", "Collation: Paper (Watermarks: a \"clef\" which is a variant of Briquet 3852-3853; a \"mons\" close to Briquet 11851- 11851; a \"main\" very close to Briquet 10720), fol. ii + 192 + iv; 1\u00b2 2-11\u00b9\u00b2 12-14\u00b9\u2076 15\u2078 16\u2074. No catchwords and no contemporary foliation. Modern foliation in pencil, Arabic numerals in the upper margin.", "Layout: Written in up to 14 long lines; wide margins, wide spacing between the lines.", "Script: Written in a messy cursiva currens script, by one professional hand.", "Binding: Original binding in limp vellum.", "Origin: Written in Spain and possibly in Barcelona, between 1401 and 1422.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 140."], "583": ["|zCataloged in hand by Silvia Donghi, August 2006."], "005": ["20080129054118.0"], "505 0": ["Flyleaf ir: \"Inter Franciscus Bugatella et Iohanne de Lor et Iohanne Agele ...in Ecclesia Sancti Iusti...Ianer 1422. 39. Sancti Iusti num. 18.\"; fol. 1r-192v: \"Noverimus (?) universi quod die Iovis quintadecima mensis Ianuarii anno a nativitate Domini millesimo quadrigentesimo vicesimo secundo coram honorabili meo dompno Petro Pujada decretorum doctore, canonico et preposito ac librario...civitatis Barchinoniensis...[...]sualis in alodio de pubus (?) simul cum no[...] moraba[...]//.\""], "035": ["(OCoLC)84650673"], "546": ["Latin."], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS57": {"001": ["ocn463657925"], "260": ["Italy,|c1701."], "040": ["BOL|eamremm|cBOL"], "520": ["Report about the Roman Curia under Innocent XII, focusing on its history, structure, written for Clemente Vitelli, the ambassador to Rome from the Grand Duke of Tuscany, Cosimo III de Medici. Includes a letter, dated 1701, written by Orazio Delci (fol. 2r-3r) and biographies of about seventy cardinals starting on fol. 40r (list of all the cardinals is on fol. 38v-40r)."], "300": ["|3Original:|a296 leaves :|bpaper ;|c63 x 198 (200 x 140) mm bound to 271 x 206 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-55) and positive (Robbins MS 57)"], "510 4": ["Phillipps, T. Cat. ms.,|c5104."], "008": ["091106s1701 it 000 0 ita d"], "099": ["Robbins MS 57"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, November 2009."], "003": ["OCoLC"], "245 00": ["Relazione della corte Romana /|ccomposta da un personaggio per servizio di sua eccellenza il sig[nore] marchese Clemente Vitelli ambasciatore straordinario al sommo pontefice Innocenzo XII ; per s[ua] a[ltezza] reale il gran duca di Toscana felicemente dominante."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 5104)."], "500": ["Ms. codex.", "Title from title page (fol. 1r)", "Binding: Vellum over pasteboard; title on spine reads \"Relazioni della Corte Romana\" (gilt letters on red background); also on spine: \"M.S. VII.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 57."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "005": ["20091106040626.0"], "505 0": ["Fol. 1r-295v: Relatione della corte Romana -- fol. 2r-3r: \"Lettera del Conte Orazio Delci\" -- fol. 38v-40r: \"Lista di tutti li signori cardinali viventi, posti secondo il suo ordine\" -- fol. 40r-295v: [biographies of cardinals]."], "035": ["(OCoLC)463657925"], "546": ["Italian."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS258": {"001": ["06-B3810"], "245 10": ["Le sei decretali benedettine."], "505 0": ["Fol. 1r-2v: \"Benedictus dilecto filio magnifico Pompeio Aldrovandi...Rationi congruit et convenit honestati ut ea que de Romani Pontificii gratia...in aliquo approbare. Datum Romae apud Sanctum Petrum anno Incarnationis dominice millesimo septuagentesimo vigesimo quarto pridie Nonas Iunii pontificatus nostri anno primo.\""], "505 8": ["Fol. 3v-4r: \"Benedictus servus servorum Dei dilecto filio Paulo Mainardi presbitero cappuccino (?) in ecclesia Florentina salutem. Nobilius generi vite...contraire si quis autem incessum. Datum Romae apud S[anctam] M[ariam] M[aiorem] anno 1724 sexto Idus Octobris pontificatus nostri anno pimo.\"", "Fol. 4r: \"Benedictus d[ilecto] f[ilio] magnifico Carolo Cerro...canonico ecclesiae Florentinae et vicario...Ibidem dilecto filio Paulo Mainardi presbitero...in ecclesia Florentina...plenam et expressam ac de verbo ad verbum de indulto [...] mentione. Datum etc.\"", "Fol. 5r-6r: \"Benedictus dilecto filio vicario venerabilis patris...oppidi (?) Sennensis...Laudabilia dilecti filii Dantis Castiglione clerici Sennensis...mandavissemus provideri. Datum Romae apud Sanctum Petrum anno 1725 quarto Nonas Ianuarii pontificatus nostri anno secundo.\"", "Fol. 7r-7v: \"Benedictus dilecto filio Iohanni Antonio Ghio rectori preposito...prepositure loci Burgati Montis Orosii...Vite ac mortis nos inducunt ut tibi reddamus ad gratiam...infringere vel incessum. Datum Romae apud Sanctum Petrum anno 1726 duodecimo Kalendas Iunii pontificatus nostri anno secundo.\"", "Fol. 8r: \"Benedictus dilectis filiis magistro Laurentio Vannicelli...Hodie dilecto filio Iohanni Antonio Ghio rectori...per litteras apostolicas non facientes plenam et expressam ac de verbo ad verbum...Datum etc.\"", "Fol. 9r-10r: \"Benedictus dilecto filio Stefano Stronati canonico...Nobilitas generi vitae ac morts honestatis aliaque laudabilia probitatis...infringere vel incessum. Datum Romae apud Sanctum Petrum anno 1726 undecimo Kalendis Iunii pontificatus nostri anno tertio.\"", "Fol. 10r: \"Benedicts d[ilecto] f[ilio] magistro Laurentio Vannicelli...Hodie dilecto filio Stephanus Stronati canonico ecclesie...plenam et expressam de verbo ad verbum de indulto [...] mentionem. Datum etc. per il signor Fiorentini.\"", "Fol. 11r-12r: \"Benedictus dilecto filio Iacobo Galzeran Segner canonco oppidi de Cepara...Apostolice sedis circumspectu benignitas desideria iusta...infringere vel incessum. Datum Romae apud Sanctum Petrum anno 1726 sextodecimo Kalendas Iulii pontificatus nostri anno tertio.\"", "Fol. 12rv: \"Benedictus dilecto filio Iacobo Galzaran Segner canonico oppidi de Cepara...plenam et expressam ac de verbo ad verbum...Datum etc.\""], "520": ["This manuscript is a set with Robbins MS 259. Consisting of 6 unbound folia, it contains copies of letters issued by Pope Benedict XIII. At the end of each letter, there is the word: \"taxa\" followed by an Arabic numeral, possibly the price paid for having the letters either copied or sent. Among the recipients and the people mentioned in the letters are: Pompeo Aldrovandi, Paolo Mainardi, Carlo Cerro, Dante Castiglione, Giovanni Antonio Ghio, Lorenzo Vannicelli, Stefano Stronati and Iacopo Galzeran Segner. Most documents seem to be related with benefits given to members of the Italian clergy (Tuscany)."], "100 0": ["Benedict|bXIII,|cPope,|d1649-1730."], "852 8": ["CUL|bRBCAG|hRobbins MS 258|xCIN=JKN"], "008": ["060810q17301750it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "300": ["12 leaves :|bpaper ;|c260 x 190 (220 x 140) mm bound to 265 x 195 mm."], "500": ["Ms. codex.", "Title from the paper wrapper.", "Collation: Paper, fol. 12; 1-6\u00b2. No catchwords and no contemporary foliation. Watermarks: a 6-pointed star enclosed in a crowned circle.", "Layout: Written in up to 36 lines. Not ruled.", "Script: Written in a secretary cursive script by at least two hands, in brown ink.", "Binding: Bound with a paper wrapper, which reads: \"Le sei Decretali benedettine inedite rarissime vanno unite alle Decretali innocenziane e clementine. N[umero?] terzo.\", written in a 18th century cursive script, brown ink.", "Origin: Written in Italy, between 1730 and 1750.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 258."], "090 8": ["Robbins MS 258"], "260": ["[Italy,|cbetween 1730 and 1750]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS192": {"001": ["ocn774702343"], "245 10": ["Felinis de Sandeis In repeticione c[?] ecc[les]ia s[an]cte Marie De constitucionibus In tercia collumna"], "040": ["BOL|eamremm|cBOL"], "852": ["BOL|bRBCAG|xCIN=JKN"], "650 0": ["Canon law."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=95;fullview=yes"], "008": ["120201q14901500au 000 0 lat d"], "099": ["Robbins MS 192"], "035": ["(OCoLC)774702343"], "100 1": ["Sandeo, Felino Maria,|d1444-1503."], "546": ["Latin."], "520": ["This repetitio concerns the rights of clerics to enjoy the patrimonium of their religious foundation. It specifically mentions the church of St. Mary. This could refer to the cathedral in Pisa, where Sandeo taught canon law, which is dedicated to St. Mary of the Assumption. It could also refer to a church in the diocese of Penne and Atri, of which he became bishop in 1495, or Lucca, of which he became bishop in 1499."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "003": ["OCoLC"], "500": ["Title from fol. 1r.", "Collation: Paper, fol. 4 (Watermark on folio 2 is similar to Briquet Monts 11808 (Innsbruck, 1490-1501; Nuremberg, 1491-1500; Linz, 1492-93; Hochst\u00e4dt, 1500) and 11811 (Ratisbonne, 1497-98; Hallstadt, 1500-01), but the cross cut out of its three points (like a Maltese cross); single bifolium.", "Layout: Written in 30 long lines.", "Script: Writen in a cursive script by one hand.", "Decoration: Small pen and ink drawing of tree or flower in left margin of 2r.", "Binding: Unbound. Wear marks on 1v and 2r suggest it was folded in quarters lengthwise (accordion folds) and stored that way for some time.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 192."], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez and Jennifer K. Nelson, February 2012."], "005": ["20120201111900.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "260": ["[Austria,|cbetween 1490 and 1500]"], "300": ["|3Original:|a1 bifolium :|bpaper ;|c330 x 223 (250 x 160) mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS)"]}, "RobbinsMS88": {"001": ["06-B4439"], "245 10": ["Questiones de consilio evangelice paupertatis."], "505 0": ["Fol. 3r-9v: [Religious vocabulary, letters A to C]"], "505 8": ["Fol. 10r-v: [Religious vocabulary, letter A]", "Fol. 11r-178r: \"[Religious vocabulary, letters A to N] Abba hebraicum...Nutus, vide supram...\"; fol. 178v-180v blank.", "Fol. 181r- 190v: \"[Religious vocabulary] Formantur...Christianus...chrisma venit, unde versus.\"", "Fol. 191r-260r: \"[Petrus Iohannis Olivi, Questiones XVII de perfectione evangelica] [rubr.] In nomine Domini Iesu Christi. Incipiunt questiones de consilio evangelice paupertatis. [text] Primo queritur an status altissime pauperitatis sit simpliciter melior omni statu divitiarum...ego illud abhorrere et pro viribus exterminare.\"", "Fol. 262r-v: \"[A prayer to the Virgin Mary] Has videas laudes qui Sacra Virgine gaudes...quero.\"", "Fol. 263r-318r: \"[Issac, Bishop of Nineveh, Liber de contemptu mundi] Anima que Deum diligit in solo Deo quietem habet...potest utique cogitaciones refrenare potenter quia cogitaciones in fatigacionibus cessant, amen.[rubr] O tu qui legis pro me rogare digneris.\"", "Fol. 319r-v: \"[Notes based on Seneca] Magnus honor est servo si eodem cibo...sunt fervenda.\"", "Fol. 320r-323v: \"Ut sciant episcopi...non tenetur de violentia.\"", "Fol. 324r-336r: \"[S. Bonaventura, Legenda minor Sancti Francisci. Fragmenta] [rubr.] Incipit minor vita beati Francisci et primo de conversione ipsius. Lectio prima. [text] Apparuit gratia Dei Salvatoris nostris diebus...beatus pater ex hac vita migravit. [rubr.] Explicit vita beatus Franciscus Deo gratia.\"", "Fol. 336r-338v: \"[S. Bonaventura, Legenda Sancti Francisci. Fragmenta] [rubr.] In festo traslationis lectio prima. [text] Francisscus igitur servus et amicus Altissicimis (sic)...ad omnem fidei firmitatem per miracula divine potentie comprobaretur e celo. Deo gratias.\"", "Fol. 339-vr: \"[Sermon] Erunt signa in sol et luna et stellis (Lc 21, 25). Tangit Salvator gratiam in isto evangelio...in animalibus ebreorum require in legendis.\"", "Fol. 339v-342v: \"[Sermon] Et tunc videbunt filium (Mc 13, 27). Hic tangit s[...] iudicii apparitionem...transitum [...] Dominus Iesus.\"", "Fol. 342v-346r: \"[Sermon] Cum audisset Iohannes (Mt 11, 2). In presenti evangelio...in adventus filii eius, amen.\"", "Fol. 346v: \"[Tabula questionum] Primo utrum Dominum posset facere materiam sine forma...distinguatur.\"", "Fol. 347r-358v: \"[Miscellanea franciscana] Et ministri Minorum ordinum prefatorum...priores predicatorum.\"", "Fol. 359r-v: \"[Propositiones de scientia] Partes sciencie dicemus quattuor esse...logica de conventione loquelae.\"", "Fol. 360r-367v: \"[Marian poetry and devotional prose] Gaude Virgo gloriosa verbum verbo...eterna retribuiret in secula seculorum, amen amen amen. Vergentem mundi...sit pro tanto pontifice.\"", "Fol. 368r-375v: \"[Devotional poetry] Al nome de Dio...tucte le cose che sono bene a fare...lomo che di perfecta karitate...\"", "Fol. 376r: \"[Schemata sermonum] Claritatem manifestativam, brevitatem informativam...quod verba in sacra scriptura.\"", "Fol. 382r-397v: \"[Sermons: on the apostles, on the Holy Cross, on the dead]", "Fol. 398v-410r: \"[rubr.] Florilegium de contemptu mundi videlicet honoris diviciarum et voluptatum, seu Flos florum. [text] Amor meus dulcissime Iesu Christe...potuit se excusare.\"", "Fol. 410v: [Diagram which shows the stages that lead to mystical ecstasy: items from \"Gloria\" to \"Ignis\"]"], "520": ["This is a composite ms. codex. Two different sets of foliation, both recent and probably contemporary with the modern binding. Fol. 27, 53, 56-58, 78-79, 179-180, 355, 377-381, and 390 blank. Additional leaves of a smaller size are tucked in as follows: fol. 65A (between fol. 64 and fol. 65); fol. 67A (between fol. 66 and fol. 67); fol. 84A (between fol. 83 and fol. 84); fol. 161bis (also numbered as fol. 162A; between fol. 161 and fol. 162); and fol. 175A (between fol. 174 and fol. 175). What were once fol. 93, 100, 148, 182, 397, and 411, respectively, were torn out; their inner edges are still visible. Fol. 351, 352, 362, and 375 have completely disappeared. Other folios are missing as well: a careful perusal of the preserved text of Saint Bonaventure's Legenda minor Sancti Francisci shows that the chapter \"De stigmatibus sacris,\" starting on fol. 335r, is incomplete: it only contains lectiones I-IV and a fragment from the beginning of Lectio V, not continued on fol. 336r, which begins instead with the last part of Lectio II from the final chapter \"De transitu mortis.\" The manuscript as bound now is a florilegium comprised mostly of excerpts of Franciscan lore, copied by several different scribes at different times and, probably, at different locations. The folios now numbered 1 and 412 were perhaps the original flyleaves, part of the same manuscript written in Gothic bookhand, 13th century, containing the \"Homiliae in Evangelia\" of Gregory the Great; the text on fol. 1r can be identified as a fragment from St. Augustine's \"In Iohannis evangelium tractatus\" while the fragment on fol. 1v comes from St. Gregory the Great's \"Homiliarum5spectively.) On fol. 261v is mentioned a friar from Ortona, Italy: \"Frater Angelus de Ortona\", and two friars named Iacobus and Bartholinus, all of them involved in a loan related to this manuscript."], "710 2": ["San Bartolomeo (Monastery : Foligno, Italy).|4asn|4fmo |5CUL."], "100 0": ["Olivi, Pierre Jean,|d1248 or 1249-1298."], "852 8": ["CUL|bRBCAG|hRobbins MS 88|xCIN=JKN"], "700 0": ["Isaac,|cBishop of Nineveh,|dactive 7th century.", "Defensor,|d7th cent.", "Bonaventura,|cda Bagnorea, saint,|d1217-1274."], "260": ["[Italy,|cbetween 1380 and 1450]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio :|acollationes vocant"], "546": ["Latin, Italian."], "008": ["060912q13801460it ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a410 leaves :|bparchment and paper ;|c147 x 115 (100 85) mm bound to 160 x 120 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 02-71) and positive (Robbins MS 88)"], "561": ["At one time the manuscript belonged in the Franciscan monastery of San Bartolomeo in Foligno (inscription in black ink on back cover: \"Questiones...Sancti Bartholomei...prope Fulginum\"). On the front flyleaf, written in brown ink by a 18th century hand, there are the former shelfmarks: \"AI.II.7\" and \"MS 78\"; written in pencil, 20th century, there is the call number: \"A-9-4- 78.\""], "500": ["Ms. codex.", "Title from the opening rubric, fol. 191r.", "Collation: Paper, and parchment (fol. 245-261 and 324-338), fol. iii (modern paper) + iv (parchment) + 410 + i (parchment) + Iii-iv (modern paper); Catchwords in the middle of the lower margins. Quire signatures in the right corner of the lower margins, on recto: a lower-case letter and a Roman numeral. The collation is impossible to discern due to the tightness of the new binding.", "Layout: Fol. 3r-178v, written in two columns, 40 lines for each column; fol. 191r-244v, written in 28 long lines; fol. 245r- 260r, written in two columns, 36 lines for each column; fol. 262r-319v, written in 21 long lines; fol. 320r-323v, written in 37 long lines; fol. 324r-338v, written in two columns, 32 lines for each column. Ruled in lead, ink and dry point.", "Script: written in textualis libraria script, at various levels of quality regarding the execution. Some parts are written in cursiva libraria script.", "Decoration: Red initials and red paragraph signs.", "Binding: Bound in brown leather over wooden boards, partly restored. One metal clasp with engraved plate representing the Lamb of God.", "Origin: Written in Italy, possibly between the end of the 14th century and the first half of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 88."], "LEADER": ["00000ctm 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=55;fullview=yes"], "090 8": ["Robbins MS 88"]}, "RobbinsMS284": {"090": ["Robbins MS 284"], "001": ["ocn133004208"], "260": ["[London],|c1943."], "040": ["BOL|cBOL|dBOL"], "520": ["Handwritten copy by one P.G. Ward of the printed copy published in London by John Hodges, Bedford Street, Strand, 1896. Library has only volume 2, parts xxi and xxii (pp. 209-272) of the printed book. For v. 1 and the rest of v. 2, see call number: BQV190 R38"], "650 0": ["Canon law|vHandbooks, manuals, etc."], "740 0": ["Short manuals of canon law."], "245 12": ["A complete manual of canon law /|cby Oswald J. Reichel."], "008": ["850118s1943 enk b 000 | eng d"], "079": ["ocm00869655"], "505 1": ["v. 1. The sacraments -- v. 2. Church discipline."], "100 1": ["Reichel, Oswald J.|q(Oswald Joseph),|d1840-1923."], "300": ["v. ;|c24 cm."], "500": ["Ms. codex.", "Title from title page.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 284.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), BQV190 .R38."], "852": ["Pts. 21-22 only", "CU-L|bRBCAG|hRobbins MS 284|t1|xCIN=brb"], "035": ["(OCoLC)133004208", "(CaOTULAS)133704508", "(CStRLIN)CUBL85-B446"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS104": {"001": ["06-B4095"], "245 10": ["Liber sextus Decretalium."], "505 0": ["Fol. 1r-113r: \"[rubr.] Incipit Liber sextus Decretalium domini Bonifaci pape octavi. [text] Bonifacius episcopus servus servorum Dei dilectis filiis doctoribus et scolaribus universis Tholose commorantibus...et in tuis expensis cotidie vel continue domestici commensales, etiam si ex illis aliquos aliquando pro tuis gerendis negociis abesse continguat. Bonifacius VIII.\""], "505 8": ["Fol. 113r-115r: \"[rubr.] De regulis iuris rubrica. [text] Beneficium ecclesiasticum non potest licite sine institutione canonica optineri...Certum est quod is committit in legem qui legis verba complectens contra legis nititur voluntatem. [rubr.] Finito librus sit laus et gloria Christo. Dextram scribentis uirtus regat ominpotentis.\""], "520": ["This is a very preciously illuminated copy of the Liber sextus Decretalium. It has no extensive gloss, but has many marginal additions copied in a cursiva libraria script by a later hand (late 14th century?). Unlikely many other witnesses of the Liber sextus whose format is big, the small format of this manuscript suggests that this manuscript was intended to be a sort of quick reference book, very easy to handle, to carry and to study."], "510 4": ["Liber sextus decretalium D. Bonifacii Papae VIII suae integritati una cum Clementinis et Extrauagantibus, earumque glossis restitutus cum priuilegio Gregorii XIII. Pont. Max. et aliorum principum (Romae : In Aedibus Populi Romani, 1584)"], "100 0": ["Boniface|bVIII,|cPope,|dd. 1303."], "852 8": ["CUL|bRBCAG|hRobbins MS 104|xCIN=JKN"], "260": ["[France?,|cbetween 1300 and 1325]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio: |asanctus eternaliter"], "546": ["Latin."], "008": ["060824q13001325fr ||||||||||||00|||ita|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["|3Original: |a115 leaves: |bparchment; |c180 x 120 (120 x 185) mm bound to 190 x 125 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-79) and positive (Robbins MS 104)"], "561": ["Old shelfmark in the upper corner of fol. iiir: \"13501.\" In the earlier part of the 19th century the manuscript was owned by Fletcher Raincock (his initials and a date on fol. iiiv: \"FR 1829\"). Later in that century the manuscript was in the library of Henry Harris (his bookplate on front pastedown, dated 27 June 1872: in a scroll his motto reads: \"Ubique patriam reminisci\", and the coat of arms shows three hedgehogs, a bird and a dragon); other 19th-century owners were the antiquarian Edward Hailstone (1810-1890; his round bookplate stamped in gold on cream-colored leather on back pastedown; the name is spelled \"Hailctone\") and John M. Gray (his bookplate on fol. ir, dated 1880; and, on the same folio, a note initialed by him: \"See also the Hailstone bookplate on the final board JMG.\" John M. Gray bookplate shows a monk sitting at his desk, holding a hourglass in his right hand and a book in his left hand. In the background the sun is rising, and a snake with a human face is crawling up an apple tree. A human skeleton and a globe are under the monk's desk. On the upper left corner there is a coat of arms with a rampant lion and seven Greek crosses.) A 19th-century handwritten note, in pencil, fol. iiir: \"MS Sixth book of Decretals of Pope Boniface VIII,\" overwritten with notes in ink, in the same hand: \"Decretals of Pope Boniface VIII Book sixth\" and \"See 8 Vol. Sismondi's Hist. Fr. page 316 as to the Bull 'Clericis laicos' directed against Edward I and Philip IV and celebrated for its violence;\" the reference here is probably to Histoire des Fran\u00e7ais (Paris, Strasbourg, and London: [n.p.], 1821-1844), 31 vols., by Jean-Charles- L\u00e9onard Simonde de Sismondi (1773-1842). On fol. iiv: \"Bibliot. Spenc. 3 Vol. &,\" in a nineteenth-century hand, in pencil; this reference is probably to one of the editions of the Bibliotheca Spenceriana; or A Descriptive Catalogue of the Books Printed in the Fifteenth Century, and of Many Valuable First Editions, in the Library of George John Earl Spencer, K.G., by Thomas Frognall Dibdin (1776-1847)."], "500": ["Ms. codex.", "Title from opening rubric, fol. 1r.", "Collation: Parchment, fol. iii (modern paper) + 115 + iii (modern paper); 1-9\u00b9\u00b2 10\u00b9\u00b2\u207b\u2075. Horizontal catchwords enclosed in a scroll, in the middle of the bottom margins. No contemporary foliation. Running titles in the upper margin. Signature marks in the right corner of the bottom margins (a lower case letter and a Roman numeral.)", "Layout: Written in two columns, 29 lines for each column, below top line. Ruled in ink. Wide margins.", "Script: Written in textualis libraria script, apparently by one hand.", "Decoration: Initials marking beginnings of sections are either historiated (fol. 1r: the pope and other church officials conferring; nearly effaced) or decorated with fantastic or grotesque animals and birds (fol. 36r, a stork and a duck; 50v, a stork and a dag with wings; 83r, a hare hunting) or gargoyles (fol. 84v). Paragraph signs and line fillers in red and blue. Many illuminated initals on 2, 3 or 4 lines throughout the text. Many 2-line red and violet, or blue and red pen flourishing initials, and many alternating blue and red simple initials. Red rubrics, and alternating red and blue paragraph signs.", "Binding: Bound with nineteenth-century red leather with gilt border; paper pastedowns and flyleaves; front cover now detached. Four raised bands on spine, stamped with gilt floral decorations; five compartments, three of which are stamped with floral decorations. Title on spine, in gilt letters: \"Bonifacii VIII. Decretalium. MSS Vellum.\"", "Origin: Written and decorated in possibly in Northern France during the first quarter of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 104."], "700 1": ["Hailstone, Edward,|d1818-1890.|4asn|4fmo|5CUL.", "Raincock, Fletcher.|4asn|4fmo|5CUL.", "Gray, John M..|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 104"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=65;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS116": {"001": ["ocm83686189"], "260": ["Romae :|bEx Typographia Reverendae Camerae Apostolicae, |c1731."], "040": ["CUY|cCUY"], "043": ["e-it---|ae-fr---"], "710 2": ["Catholic Church.|bPope (1700-1721 : Clement XI)"], "650 0": ["Privileges and immunities, Ecclesiastical|zFrance|zSavoy.", "Privileges and immunities, Ecclesiastical|zItaly|zSavoy."], "008": ["940913s1731 it 000 0 lat d"], "099": ["Robbins MS 116"], "041 0": ["latita"], "003": ["OCoLC"], "245 00": ["Brevia, declarationes, decreta, monitoria, & mandata S.M. Clementis XI. super immunitate ecclesiastica :|b[et] materijs feudalibus Pedemontis, disposita iuxta oridinem bullarij eiusdem Summi Pontificis edit, Romae 1723 : et insuper praeceptun Eminentissimi ... S. Clementis S.R.E. Camerarij emanat. de 23. Decembris 1730. vigore chirographi SS.D.N. Papae Clementis XII. signat. sub die 20. mensis [et] anni praedicti."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "651 0": ["Savoy (France and Italy)|xChurch history|xSources.", "Piedmont (Italy)|xChurch history|xSources."], "500": ["Latin (chiefly) and Italian.", "Woodcut initials.", "Signatures: a\u2074 A-H\u2078 I\u00b9\u2070 K\u00b9\u00b2."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080130061745.0"], "LEADER": ["00000cam 2200000La 4500"], "035": ["(OCoLC)83686189"], "300": ["[8], 167, [1] p. ;|c30 cm."]}, "RobbinsMS277": {"001": ["06-B3800"], "245 10": ["[Summa de casibus penitentiae]"], "520": ["Two quires from the most important practical textbook of penance in the 13th century, compiled in the 1220s by the Spanish Dominican Raymond of Pe\u00f1afort. It opens with the prologue followed by chapter headings for book I and the beginning of book I. This manuscript is very neat and has very few marginal notes, which means that it was not used as a textbook or a working copy."], "LEADER": ["00000ctm 2200000 a 4500"], "100 0": ["Raymond,|cof Pe\u00f1afort, Saint,|d1175?-1275."], "852 8": ["CUL|bRBCAG|hRobbins MS 277|xCIN=JKN"], "260": ["[Paris?,|cbetween 1250 and 1275]"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Summula circa iudicium animarum"], "246 2": ["|iSecundo folio:|acasus est pro operibus"], "546": ["Latin."], "008": ["060809q12501275fr ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "300": ["20 leaves ;|bparchment ;|c180 x 130 (120 x 80) mm bound to 190 x 135 mm."], "561": ["The manuscript has a piece of a French newspaper and a piece of a French manuscript (18th century?) inside the spine, which could mean that it was in the possession of a French family or institution: in addition, on the front cover is visible the rectangular sticker left by a bookplate. On the back flyleaf 1v, written in pencil by a 20th century hand: \"? 39\". On the back flyleaf iir, written in pencil by a 20th century hand: \"38 MN 3\"."], "500": ["Ms. codex.", "Title from printed edition; added title from fol. 1r, written by an early 15th century hand.", "Collation: Parchment, fol. i (modern marbled paper) + 20 + i (modern paper) + ii (modern marbled paper); 1\u00b9\u00b2 2\u2078. No catchwords and no contemporary foliation. Modern pagination in pencil, only on rectos, by a 20th century hand.", "Layout: Written in 2 columns, 40 lines for each column. Ruled in lead with double vertical bounding lines. Prickings in the outer and bottom margins.", "Script: Written in textualis libraria gothic script by two hands: first hand, pp. 1-27; second hand, pp. 28-40. Below top line.", "Decoration: P. 1, two red and blue 5-lines pen-flourishing initials. Many red and blue penworked initials, mostly on 2 lines, sometimes on 3. Alternating red and blue paragraph marks throughout the text. Red rubrics.", "Binding: Brown leather over pasteboard, 19th century. The front and back cover are blind tooled with symmetrical floral patterns, and have gilt borders. The spine is gilt tooled with six flowers and the word: \"Proces\" in capital letters. Blue, red and white marbled paper used as flyleaves.", "Origin: Written in France and possibly in Paris, between 1250 and 1275.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 277."], "505 0": ["Pp. 1-40: \"[prologue] Quoniam ut ait Ieronymus secunda tabula post naufragium...corrigas et emendes. [text] Quoniam inter crimina ecclesiastica symoniaca...pervenit enim et cetera sicut//.\""], "090 8": ["Robbins MS 277"]}, "RobbinsMS234": {"001": ["06-B3621"], "245 10": ["[Letter from Ferrante Gonzaga promising money to the army of Milan]"], "505 0": ["Fol. 2r-8r: \"[text] In nomine Domini anno a nativitate eiusdem millesimo quingentesimo quinquagesimo tertio indicationes duodecima die decimo octavo mensis octobris Illustrissimus et eximius Dominus Dominus Don Fernandus a Gonzagha princeps Malphiti...Carolus Quintus divina favente clementia Romanorum Imperator Augustus...Recognoscimus et notum facimus tenore presentium universis quod cum pro communi bono status Mediolani proque conservatione ac defenssione eiusdem ac totius Italie quiete et tranquilitate cupiam providere ne exercitus noster quem in Italia habemus et hactenus gravibus impensis aluimus ex necessitate rei pecuniarie laboret...Ego Alexander Confanonerius filius quondam Domini Iohanni Ambrosii porte orientalis parochie Sancti Pauli Mediolani publicus Imperiali et Apostolica auctoritatibus ac Cesarie camere Illustrissimi Domini Mediolani notarius suprascriptum instrumentum sic pervolutum (?) tradidi et subscripsi\" ; fol. 8v: ruled but blank."], "520": ["Letter, dated the Wednesday, October 18th, 1553, from Ferrante (Ferdinandus) Gonzaga of Mantova, stating that he is authorized by Charles V to provide to pay the army of Milan."], "710 2": ["Casa de Subhastes de Barcelona.|4asn|4fmo|5CUL."], "300": ["8 leaves :|bparchment ;|c237 x 162 (187 x 112) mm bound to 240 x 165 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 234|xCIN=JKN"], "700 0": ["Charles|bV,|cHoly Roman Emperor,|d1500-1558."], "008": ["060728s1553 it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged in hand by Jennifer K. Nelson and Silvia Donghi, July 2006."], "100 1": ["Gonzaga, Ferrante,|d1507-1557."], "561": ["The manuscript was a gift of the Case de Subhastes de Barcelona."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 8 + i (modern paper); 1\u2078.", "Layout: Written in 36 long lines; ruled in ink with double vertical bounding lines.", "Script: Written by one hand in a neat humanistic-style script with cursive elements.", "Decoration: First letter of opening word \"In\" has a long, 7-line descender with pen flourishings. The notary's initials, \"AC,\" written in letters 3-lines high with a cross in the middle. All decorative elements are in the same brown ink as the rest of the text.", "Binding: Blind-tooled, 16th century leather binding, likely original. Binding is very worn.", "Origin: Many of the witnesses of this document are from Asti. The document was notarized in Milan.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 234."], "090 8": ["Robbins MS 234"], "260": ["Milan?,|c1553."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS83": {"001": ["ocn244846723"], "245 10": ["[Margarita decreti seu tabula Martiniana]"], "040": ["BOL|eamremm|cBOL"], "650 00": ["Canon law|vIndexes."], "LEADER": ["00000ntm 2200000Ia 4500"], "100 0": ["Martinus,|cPolonus,|dd. 1279."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=52;fullview=yes"], "008": ["080903q13001399enk 000 0 lat d"], "099": ["Robbins MS 83"], "035": ["(OCoLC)244846723"], "003": ["OCoLC"], "546": ["Latin."], "520": ["Fragment contains one quire (six folios) of the Margarita decreti seu tabula Martiana of Martinus Polonus. The text contained in this quire begins with the preface (Inc.: \"Inter alia que ad fidelium christi doctrina scripta sunt...\") and continues with several titles under the letter \"a\" from \"Aaron\" to the first part of \"Appellacio\"."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "500": ["Ms. fragment.", "Title supplied by cataloger.", "Collation: Parchment, one quire of six leaves.", "Layout: Written in 41 long lines.", "Script: Written in an anglicana script by one hand.", "Decoration: Each head word is indicated with a red, two- line initial.", "Binding: 1 unbound quire.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 83."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "005": ["20080903012038.0"], "505 0": ["Fol. 1r-6v: \"[text] Inter alia que ad fidelium Christi doctrina scripta sunt...Q[uod] post secundam appellationem tertio appellans super eadem causa non auditur .ii.q.vi. si autem fuerit .c. siquis inquacumque...\""], "260": ["England,|c[14th cent.]"], "300": ["|3Original:|a6 leaves :|bparchment ;|c237 x 165 (201 x 137) mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-66) and positive (Robbins MS 83)"]}, "RobbinsMS66": {"001": ["ocn192009395"], "245 10": ["[Liber] fundationis ordinis B[ea]te Marie de Mercede redemptionis captivorum."], "040": ["BOL|eamremm|cBOL"], "520": ["Text about the foundation of the order of the Ordo Beatae Mariae de Mercede redemptoris captivorum (Our Lady of Mercy of the Redemption of the Captives), a royal and military order established in 1218 by St. Peter Nolasco in Barcelona, Spain, for the redemption of Christian captives. Contains the history of the order (\"speculum ordinis\") and its \"constitutiones.\" This manuscript also contains the Regula beati Augustini and the Expositio in Regulam beati Augustini by Hugh of St. Victor."], "510 4": ["Phillipps, T. Cat. ms.,|c6559."], "260": ["Barcelona, Spain,|cbetween 1445 and 1499."], "099": ["Robbins MS 66"], "246 0": ["Speculum fratrum ordinis Sanctae Mariae de Mercede"], "003": ["OCoLC"], "581": ["James William Brodman, Ransoming Captives in Crusader Spain: The Order of Merced on Christian-Islamic Frontier (Philadelphia: University of Pennsylvania Press, 1986), 146 n. 2 (for another manuscript including the Speculum, now in Arxiu de la Corona d'Arag\u00f3) and 179 Appendix B, n. 1."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["The manuscript remained at the convent of the Order of Merced until at least 1699 and possibly later (see note on fol. ir). Fol. 133v and 134v include the professions of Didacus de Lebrixa (1 March 1529), Andreas de Torquemada (5 May, no year specified), and Johannes de Vaena[?] (15 October 1513). Sometime in the sixteenth century the book belonged to Friar Ildefonso de Roxas (note in his hand on fol. 133r, followed by a red wax seal on the verso of that folio). On fol. i rv, notes in Spanish regarding the history of the manuscript in two different hands; the latter includes a date of 1699. Marginal corrections in a late seventeenth-century hand (note on fol. ir: \"Y lo copi\u00f2 fr. Franc. De Alchacoa a\u00f1o 1699. Corrigendo con respeto loq. Se ha descubierto digno de Correccion.\" To this a different hand has responded: \"Nada deiba corregir pues los originales se deben conservar como estan, y se notan los yerros en la copia.\" At one time the manuscript was part of the collection assembled by Sir Thomas Phillips, his no. 3071."], "500": ["Ms. codex.", "Title from opening rubric to the \"prohemium,\" fol. 1r. Additional titles from spine and from an added note on front pastedown; and from the opening rubric to the main text, fol. 6r.", "Collation: Parchment, fol. i + 134 + ii; 1-3\u00b9\u2070 4\u2074 5-14\u00b9\u2070; catchwords a the end of each quire.", "Layout: Written in 29 long lines, ruled in lead; prickings visible, often cropped.", "Script: Written in a textualis libraria script by one hand. Marginal corrections in a late seventeenth-century hand.", "Decoration: 8-line initials in red and blue with line fillers in other color on fols. 1r, 6r, 11v, 21r, 28v, 35r, 62v, 100r, and 105v. 2-line initials in red and blue with line fillers in other color denoting section headings throughout. Red paragraph marks and red \"lectio\" instruction throughout.", "Binding: Brown leather over wooden boards, bearing stamps and fillets; the two original fore edge clasps are lacking. Title on spine: \"Statuta redemptionis captivorum de Barchinone.\"", "Origin: Originally produced at the Barcelona convent of the Order of Merced after 1445, as the first article is a copy of a mid-fifteenth century chronicle of the order by Nadar Gaver, then Master of the Order.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 66."], "600 00": ["Augustine,|cSaint, Bishop of Hippo.|tRegula."], "300": ["|3Original:|a134 leaves :|bparchment ;|c237 x 172 (165 x 115) mm. bound to 249 x 180 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 82-131) and positive (Robbins MS 66)"], "610 20": ["Mercedarians."], "505 8": ["Fol. 100r-105r: \"[rubr] Incipit regula beati Augustini [text] Ante omnia fratres karissimi diligatur Deus...Caveat de futuro ut sibi debitum diminuatur et in tentationem non deducatur. Amen. [text] Expliciunt regule beate Augustini Deo gratias.", "Fol. 105v-132v: \"[rubr] Incipit expositio regule beati Augustini [text] Hec precepta que subscripta sunt ideo regula appellantur...et quanto exterior pulchritudo diligitur tanto interior minus amatur.\""], "650 00": ["Monasticism and religious orders|vRules.", "Monastic and religious life."], "246 04": ["Statuta redemptionis captivorum de Barchinone"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=38;fullview=yes"], "700 0": ["Hugh,|cof Saint-Victor,|d1096?-1141."], "008": ["080213q14451499sp 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea, and in hand by Kathleen A. Stewart and Jennifer K. Nelson, February 2008."], "546": ["Latin and Spanish."], "100 1": ["Gaver, Nadal."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080213061521.0"], "505 0": ["Fol. 1r-33r: Speculum fratrum ordinis Sanctae Mariae de Mercede; fol. 1r-6r: \"[rubr] Prohemium libri fundationis ordinis Beate Marie de Mercede redemptoris captivorum; [text] Frater Nathalis in artibus et in theologia professor...Et vale in Christo Ihesu domino nostro pro me orando\"; fol. 6r-33r: \"[rubr] In Christi nomine amen. Incipit speculum fratrum ordinis beatissime dei genitricis Marie de Mercede redemptoris captivorum...[text] Creatorum (sic) rerum insinuans scriptura Deum esse creatorem...et confirmata per reverendum magistrum generalem vicesima octava eiusdem mensis, si licet die apostolourm Simonis et inde anno predicto in eodem mense\" ; fol. 33r-34r: ruled but blank (except for a few non-contemporary pen trials, perhaps by a later owner) ; fol. 35r-100r: \"[rubr] In nomine domini nostri Ihesu Christi...[text] Incipiunt constitutiones fratrum ordinis sancte Marie de Mercede redemptoris captivorum. Quoniam ex precepto regule iubemur habere cor unum...in cuius rei testimonium sigillum nostrum presentibus duximus apponendum datum in nostro conventu, etc.\""], "035": ["(OCoLC)192009395"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS274": {"001": ["06-B3557"], "260": ["[Southern France,|cbetween 1280 and 1300]"], "505 0": ["Fol. 1r-27v: \"[text] // item potest fieri semper idest tam diebus...remanet enim ligatus pro aliis//.\""], "520": ["Four quires from Summa de casibus poenitentiae by Raymond of Pe\u00f1afort."], "100 0": ["Raymond, |c of Pe\u00f1afort, Saint, |d 1175?-1275"], "852 8": ["CUL|bRBCAG|hRobbins MS 274|xCIN=JKN"], "008": ["060727q12801300fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["Commentary on Canon law"], "245 00": ["Summa de casibus poenitentiae :|k manuscript fragment."], "546": ["Latin."], "300": ["27 leaves :|bparchment ;|c190 x 135 (120 x 90) mm bound to 200 x 145 mm."], "561": ["On inside front cover, written in pencil by a 20th century hand, there is the number \"519\", possibly a former shelfmark."], "500": ["Ms. codex.", "Title from spine.", "Collation: Parchment, fol. ii (modern paper) + 27 + ii (modern paper) ; 1\u2074 (fol. 4 is missing) 2-4\u2078. No catchwords and no contemporary foliation.", "Layout: Written in 2 columns of 36 lines, below top line. Running titles that spell out \"L[iber] III\" on the upper margins, in red and blue ink. Wide margins, but no marginal notes and no glosses.", "Script: Written in textualis libraria script, by one hand, in the late 13th century.", "Decoration: Red and blue pen flourishing initials on two lines troughout the text. Red and blue paragraphs marks and red rubrics.", "Binding: Parchment over pasteboard, 17th or 18th century. The spine reads: \"Iuris Canonici frag. MSS.\"", "Origin: Written in Southern France, at the very end of the 13th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 274."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "090 8": ["Robbins MS 274"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS162": {"001": ["06-B4331"], "245 10": ["Apologia della verit\u00e0 conculata ovvero confutazione di alcuni opusculi anonimi, che con vani sforzi tentano allucinare i spiriti deboli in materia di religione ; |b[Papal Bull of Pius VII, 1809 ; Collection of prophetic texts]"], "505 0": ["Fol. 1r-88v: \"Apologia della verit\u00e0 conculata ovvero confutazione di alcuni opusculi anonimi, che con vani sforzi tentano allucinare i spiriti deboli in materia di religione\" ; fol. 2r: \"Annotazioni necessarie ad instruzione di chi legger\u00e0\" ; fol. 2v: blank ; fol. 3r-4r: \"[preface] Sventura pi\u00f9 perigliosa non potea accadere alla religione Cattolica di quella da Lei sofferta in questi ultimi tempi...Conchiudigli dunque col Magno Leone: Quisquis huic Sedi Principatum existimat denegandum, illius quidem nullo modo potest minuere dignitatem sed inflatus spiritu superbie sue, seipsum in inferna demergit\" ; fol. 5r-83v: \"[text] Notizie relative alle quattro propozizione del Clero Gallicano. E' fuor d'ogni dubbio, che la Chiesa Gallicana fino al XVII secolo \u00e8 stata sempre attaccata alla Santa Sede...e del dovuto rispetto dai figli ai padri (?) e dai sudditi agli unti del Signore\" ; fol. 84r-85v: blank ; fol. 86r-88v: Index ; fol. 90r-121r: \"Della doppia sovranit\u00e0 Pontificia, e delle vicende prospere o avverse alla Santa Romana Sede (parte seconda)\" ; fol. 90r-94v: \"[preface] Sventura pi\u00f9 perigliosa non potea accadere alla religione Cattolica di quella da Lei sofferta in questi ultimi tempi...che fu posta per ferma base in persona di Pietro: Tu es Petrus, et super hanc Petram edificabo ecclesiam meam\" ; fol. 95r- 121r: \"[text] Della doppia sovranit\u00e0 Pontificia ed in primo luogo della potest\u00e0 spirituale del sommo Pontefice...Volendo il divin Redentore stabilire l'ordine da tenersi nel governo...e questi poteano perci\u00f2 creare gli Arcivescovi, dai quali venivano creati gli vescovi\" ; fol. 121v-122v: blank ; fol. 123r-164r: \"Parte terza. Si tratta delle vertenze tra il sommo Pontefice Pio VII e Napoleone Imperatore de Francesi...incominciando dalli 2 febraio 1808 e di lui ritorno in Roma nel maggio 1814\" ; fol. 164v: blank ; fol. 165r-169v: \"[Papal Bull: text] Ad perpetuam rei memoriam. Quum memoranda illa die secunda februarii...Datur Romae apud Sanctam Mariam Majorem sub annulo piscatoris die decima iunii anni millesimi octingentesimi noni pontificatus nostri anno decimo\" ; fol. 170rv: blank ; fol. 171r-175v: Prophecies of various saints, nuns and priests, as well as from the scriptures ; fol. 176r-179v: blank ; fol. 180r-184v: \"Profezie del venerabile Padre Bartolomeo da Saluzzo Minor Riformato, morto in San Francesco a Ripa in Roma nel giorno di Pentacoste 1605\" ; fol. 185rv: \"Profezia del Venerabile Beda ritrovata nella sua camera dopo la sua morte\" ; fol. 186r-190v: blank ; fol. 191r-192v: Index to Parte Terza ; fol. 193r-194v: blank."], "520": ["A comprehensive attack on the legal and historical basis for Napoleon's annexation of the papal states in 1808, written by an apparently pseudonymous canon lawyer named Theofilo Pelchich. The work examines the entire historical background of Gallicianism and its development into the imperialist claims of the late 18th century, culminating in an examination of the contemporary events through 1808. Appended as part 3 of the work is a transcript of 55 letters and documents concerning the conflict between the Vatican and the emperor. At the end of the codex is the transcript of the 1809 Papal Bull of Pius VII, with which he excommunicated Napoleon and his troops. The last part contains various prophetic texts, including one said to be by the Venerable Bede."], "650 0": ["Gallicanism."], "300": ["194 leaves :|bpaper ;|c265 x 204 (250 x 181) mm bound to 282 x 209 mm."], "510 4": ["Phillipps, T. Cat. ms.|c5039."], "852 8": ["CUL|bRBCAG|hRobbins MS 162|xCIN=JKN"], "008": ["060906q18141850it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Italian."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "100 1": ["Pelchich, Teofilo."], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (his no. 5039). Bookdealer's description on front flyleaf in pencil."], "500": ["Ms. codex.", "Title for the main text from title page (fol. 1r); title for other texts supplied by cataloger.", "Collation: Paper, fol. i + 194; gatherings are quite irregular: many different sizes of paper are present, with quires often nested within other quires but not in any regular pattern, and many singletons tipped in.", "Layout: Written in up to 37 long lines.", "Script: Written in a cursive script predominantly by one hand.", "Binding: Half-leather binding with panels of paper with a blue and yellow weave pattern on red ground. Title zApolog. e Profez.y on paper label on spine; small green dot label on spine.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 162."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 162"], "260": ["[Rome?,|cbetween 1814 and 1850]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS41": {"001": ["ocn456566689"], "245 10": ["Recueil de divers traitt\u00e9s pour l'instruction de Monseigneur le M... de ... composes par differents autheurs."], "040": ["BOL|eamremm|cBOL"], "852": ["BOL|bRBCAG|xCIN=JKN"], "260": ["France,|cafter 1670."], "008": ["091015q16701699fr 000 0 fre d"], "099": ["Robbins MS 41"], "505 0": ["Pp. 5-68: \"Libertez de l'Eglise gallicane -- pp. 69-79: \"Des assembl\u00e9\u00e9s du clerg\u00e9\" [redaction A] -- pp. 80-88: \"Des assembl\u00e9\u00e9s du clerg\u00e9\" [redaction B] -- pp. 89-96: \"Des assembl\u00e9\u00e9s du clerg\u00e9\" [redaction B bis] -- pp. 97-138 : \"Des assembl\u00e9\u00e9s du clerg\u00e9 [redaction C] -- pp. 139-180: \"Des Decimes\" -- pp. 181-255: \"Trait\u00e9 des decimes\" -- pp. 257-319: \"Memoire sur les levees\" -- pp.321-355: \"Memoire concernant les rentes du clerg\u00e9\" -- pp. 357-389: \"Des universit\u00e9s et particulierement de celles de Paris\" -- pp. 391-408: \"Regles de chancellerie de Rome\" -- pp. 413-504: \"Des Estats\" -- pp. 505-536: \"Traitte de la noblesse.\""], "100 1": ["Patru, Olivier,|d1604-1681."], "500": ["Ms. codex.", "Title from title page (p. 3).", "Paper, 264 leaves; paginated 3-536 + i; contemporary pagination on odd pages only, partially sporadic; pagination begins at 3 (title page); p. 179-180 skipped; p. 391 misnumbered as 390.", "Script: Written in a cursive script by one hand, possilby that of the author.", "Binding: Brown speckled vellum over pasteboard.", "Origin: Likely and autograph manuscript, written in Paris (Olivier Patru was a Parisian lawyer and writer).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 41."], "581": ["Olivier Patru, \"Memoires sur les Assembl\u00e9es du Clerg\u00e9.\" (cf. redaction A) and \"Trait\u00e9 des D\u00e9cimes ou leur origine et leur suite sont marqu\u00e9es par l'ordre de la Chronologie.\" In: \u0152uvres diverses: contenant les plaidoyers, harengues, lettres et vies de quelques-uns de ses amis. University of Lausanne, 1714 & 1732, vol. 2, pp. 445-452, & 452-483. (Reprint: Genveve, Slatkine, 1972). Olivier er Patru, Plaidoyers et Ouvres diverses de Monsieur Patru de l'Acad\u00e9mie fran\u00e7oise. Nouvelle \u00e9dition, augment\u00e9e de plusieurs pieces qui ont est\u00e9 trouv\u00e9es parmi les papiers de l'auteur apres sa mort, 2 vols. (Paris: Mabre-Cramoisy, 1681), 2: 803-814 (\"Memoires sur les assembl\u00e9s du clerg\u00e9\"), 2: 815-867 (\"Trait\u00e9 des d\u00e9cimes\")."], "520": ["The second redaction of Des assembl\u00e9\u00e9s mistakenly began to be copied on pp. 89-96, but was stopped abruptly (cf. p. 89, \"cecy c'est le meme traitt\u00e9 precedent...\"). Probably an autograph manuscript (signature \"Patru\" on page 255). Dated 31 August 1670 (page 254); 11 May 1670, signed Mr. Petit (page 357)."], "546": ["French."], "003": ["OCoLC"], "561": ["Bauffremont library (bookplate with arms on inside front cover); Library of Fran\u00e7ois Tocaven (ex-libris on inside front cover and title page)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Pamela Diaz, October 2009."], "005": ["20091015022915.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)456566689"], "300": ["|3Original:|a264 leaves :|bpaper ;|c290 x 205 mm bound to 305 x 215 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-41) and positive (Robbins MS 41)"]}, "RobbinsMS271": {"001": ["06-B3710"], "245 10": ["Perush ha-Mishna."], "505 0": ["Fol. 1r-18v: Introduction ; fol. 18v-28v: Berakhot ; fol. 28v-40v: Pe\u02bcah ; fol. 40v-51v: Dem\u02bcai ; fol. 51v-68v: Kela\u02bcim ; fol. 68v-82v: Shevi\u02bbit ; fol. 82v-98r: Terumot ; fol. 98r-105r: Me\u02bbasrot ; fol. 105r-115r: Ma\u02bbaser sheni ; fol. 105r-124r: Halah ; fol. 124r-131r: \u02bbOrlah ; fol. 131v -137r: Bikurim."], "520": ["This manuscript contains the text of the Introduction to the Order of Zera\u02bbim (the first section of the Mishnah), as well as the text of the Mishnah, with the accompanying commentary of Maimonides (Rabbi Moses ben Maimon, also known as the Rambam). It includes the 11 tractates of the Order of Zera\u02bbim. There are many diagrams in red, black and green ink, some square, some circular, particularly in tractate Kela\u02bcim (fol. 51v-68v), which depict planting guides for fields."], "246 1": ["Kit\u0101b al-Sir\u0101j."], "300": ["137 leaves :|bpaper ;|c327 x 216 ( 240 x 162) bound to 329 x 223 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 271|xCIN=JKN"], "008": ["060803s1750 ye ||||||||||||00|||jrb|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "630 00": ["Mishnah|vCommentaries."], "546": ["Judeo-Arabic and Hebrew."], "100 1": ["Maimonides, Moses,|d1135-1204."], "561": ["On front pastedown is name written in Hebrew (possibly Yemenite script); consonants in this name are \"DWD(or R) G\u02bcL,\" vowels indeterminable. On back flyleaf is a doodle in ink, now smudged. At head edge of back flyleaf is possibly a bookdealer stamp, in Hebrew, English and Arabic, of one Shalom Yitshar, Rabbi. The stamp is very faded."], "500": ["Ms. codex.", "Collation: Paper (oriental glossy, Yemenite), fol. i (watermark depicts a moon with a face within a shield) + 137 + ii; 1-6\u2078 7\u2077 8-15\u2078 16\u2077 17\u00b9\u2070; gatherings signed in Hebrew numbers in the left corner of the tail edge at the end of each quire; catchwords at the bottom of every leaf.", "Layout: Written in 30 long lines, below top line; frame ruled in dry point.", "Script: Written in square Yemenite Hebrew script by at least 2 hands.", "Binding: Blind-tooled, dark brown leather over pasteboard with envelope flap at fore edge. On the front and back boards and the envelope flap the tooling frames the edge with small dots within straight lines; in the center of the boards is an ogival shape with decorative in-filling; corners decorated with flowers, leaves and tendrils contained within symmetrical shapes.", "Colophon reads: \"I completed this Mishnah of the Order of Zera\u02bbim with the help of God the 28 day of the month of \u02bcIyar in the year [515]...I Shalom ha-Kohen al- \u02bbAr\u02bcaki...was very pressed for time, so God should give me the benefit of the doubt...just as I merited to complete this Order, so too may I merit to complete all of the Orders and copy many books...", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 271."], "583": ["|zCataloged from existing description by Paul Hamburg and in hand by Saul M. Friedman and Jennifer K. Nelson, August 2006."], "090 8": ["Robbins MS 271"], "260": ["Yemen,|c5510 [1750]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS137": {"001": ["06-B3898"], "245 10": ["Tabula auctoritatu[m] et sententiar[um] Biblie positarum in libris decretor[um] et decretalium s[e]c[un]d[u]m ordine[m] alphabeti[cum] /|cIo[hannes] Cald[erinu]s do[c]t[or]."], "505 0": ["Fol. 1r-132r: \"[rubr.] Incipit tabula auctoritatum et sententiarum positarum in libris decretorum et decretalium secundum ordinem alphabeticum [text] Seriem huius tabule continentis auctoritates et sententias Biblie prout in finis Decretorum et Decretalium...Zyzama dicatur messonibus colligite zyzamarum et alligate fasciculos ad comburendum. Matteus xiii xxiii quaestio prima in principio. Require eradicare .a. [rubr.] Explicit Tabula auctoritatum et sentenciarum Biblie inductarum in compilationibus decretorum et decretalium contatarum domini Iohannis Calderini Decretorum doctor. Scripta per manus Martini de Spitilinow et cetera\" ; fol. 132v: ruled but blank."], "520": ["The Tabula auctoritatum is an alphabetical index to biblical citations."], "300": ["|3Original: |a132 leaves :|bpaper ;|c219 x 150 (160 x 98) mm bound to 230 x 163 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 08-135) and positive (Robbins MS 137)"], "008": ["060816q14751525pl ||||||||||||00|||lat|d"], "852 8": ["CUL|bRBCAG|hRobbins MS 137|xCIN=JKN"], "260": ["[Poland?,|cbetween 1475 and 1525]"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Tabula auctoritatum et sentenciar[um] Biblie inductar[um] in compilat[i]onibus decretor[um] et decretalium co[n]tatar[um]"], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "100 1": ["Calderinus, Joannes,|dd. 1365."], "561": ["At the head edge of front pastedown is written the title in ink in a contemporary hand \"Concordancie authoritatum Biblie et Decretorum.\" On front pastedown are two modern notes: one a number written in lead pencil \"1238,\" and one a year written in purple pencil \"Anno 1392.\" Across the front cover is written in pencil by a modern hand \"Concordantia.\""], "500": ["Ms. codex.", "Collation: Paper (similar, but not identical to, Briquet \"T\u00eate e boeuf,\" 14257), fol. i (parchment) + 132 + fol. i (parchment); 1-11\u00b9\u00b2", "Script: Written in a cursive libraria formata script by one hand.", "Layout: Written in 32 long lines; frame ruled in ink.", "Binding: Bound in velvety leather over wooden boards, many wormholes. Five raised bands. Traces of two leather ties: fronts now missing; backs, which were nailed on, torn off short. Flyleaves made from 14th cent. parchment. On the front pastedown is an excerpt from the second chapter of the Moralia of Pope Gregory II that begins \"Voluntas Sathane semper iniquia est...\"; on the recto of the first flyleaf is a paragraph writte by a notary in 1392 which is signed \"Et ego Wenceslaus natus Milazkonis de Rokymana...\" (locating the scribe in Bohemia) with his notarial mark penned next to it. The back flyleaf also contains a brief legal document.", "Origin: Colophon reads \"Scripta per manus Martini de Spitilinow\" (fol. 132r).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 137."], "090 8": ["Robbins MS 137"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=81;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS308": {"001": ["ocn681638239"], "245 10": ["Summarium clementinarum ;|bSummarium sexti libri decretalium."], "040": ["BOL|eamremm|cBOL"], "520": ["Manuscript contains the summaria (summaries) of the decretals included in the Clementinae (the collection of decretals compiled under Clement V) and in the Liber Sextus (the canonical collection compiled under Boniface VIII). The purpose of summaria was to facilitate for practitioners the use of this massive body of material. The summaria included in this manuscript offered the prior of an abbey, in this case the abbey of St. Paul's outside the Walls (San Paolo fuori le mura), a practical, portable vademecum of canon law."], "710 2": ["Abbazia di S. Paolo fuori le mura (Rome, Italy)|4asn|4fmo |5CUL."], "300": ["|3Original:|a103 leaves:|bpaper ;|c90 x 65 (70 x 45) mm, bound to 95 x 70 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN) and positive (Robbins MS 308)"], "260": ["[Rome? ,|cbetween 1500 and 1515]"], "099": ["Robbins MS 308"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript is Italian in origin, and was likely produced in Rome based on the rare watermark of a dog in a circle (Briquet, \"Chien,\" no. 3646 (fol. 97 and 100)) and on an ownership description in the scribe's hand stating that the book was created for use by the prior of the abbey of San Paolo fuori le mura, which is located on the via Ostiense in Rome. Modern shelfmark typed in red and black on a paper label affixed to front pastedown: MS. S. I. / .P. 12. N. 22.\" Written in pencil on back pastedown are two markings: \"3C99V\" and \"S687.\""], "500": ["Ms. codex.", "Titles from headings (fol. 1r and 25r).", "Collation: Paper, fol. iii (modern paper) + 103 + iii (modern paper); 1-12\u2078 13 \u2078 (-1). Watermarks close to Briquet, \"Agneau pascal,\" no. 49 and variant no. 50 (Rome, 1535; Florence, 1511) and \"Chien,\" no. 3646 (Rome 1515).", "Layout: Written in 23 long lines; frame ruled in brown ink and plummet; double bounding lines at top.", "Script: Written in a cursiva libraria script by one hand. Most of the text copied in red ink with rubrics in a darker shade of red ink or in brown ink; paragraph marks in brown; one and two-line high initials throughout in dark brown ink (occasionally eaten through leaving a few holes).", "Binding: Late 16th or early 17th century blind-stamped brown calf with a double frame composed of blind filets, central frame stamped with rosette and leaf tool at angles (rebacked and some restorations to covers; replaced paper endleaves).", "Origin: The manuscript appears to have been copied for the prior of the monastery of San Paolo fuori le mura (Saint Paul's outside the Walls. An ownership inscription in the scribe's hand on fol. 24v reads \"Iste libellus est deputatus usui prioris sancti pauli de urbe.\" \"Sancti pauli de urbe\" refers to the famous Benedictine Abbey and Basilica of San Paolo fuori le mura in Rome, the site where Saint Paul was buried.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 308."], "035": ["(OCoLC)681638239"], "505 8": ["Fol. 25r-101: Summarium sexti libri decretalium \"[heading] Liber primus. Summarium sexti libri decretalium. De summa trinitate et fide catholica. Titulus primus, capitulum primum. Fideli ac devota professione. Spiritus sanctus eternaliter a patre et filio tamquam ab uno principio et unica spiratione procedit...Sicut nobis. Privilegiato aliquot ut possit conferre beneficio clericorum suorum quid appellatio clericorum suorum designet ostendit.\"", "Fol. 101v-103v: ruled but blank."], "100 0": ["Giovanni d'Andrea,|dapproximately 1270-1348"], "008": ["101116q15001515it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, November 2010."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20101116045117.0"], "505 0": ["Fol. 1r-24v: Summarium clementinarum \"[heading] De summa trinitate et fide catholica [text] Summarium clementinorum. Fidei catholice. Titulus primus, capitulum primum. Fatetur concilium unicum Dei filium in essentia Dei eternaliter subsistentem corpus humanum...Sepe contigit. Determinat et declarat quid significat hec verba...Explicit summarium clementinarum. Iste libellus est deputatus usui prioris sancti pauli de urbe.\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS125": {"001": ["06-B3816"], "505 0": ["Fol. 2r-3r: \"[chapter index] Infrascripte sunt rubrice candini (?) per ordinem descripte. Quid sit accusatio et quando accusatio sit...dependentibus ab ipsis statutis, ff. xlviii.\""], "505 8": ["Fol. 4r-11v: \"Canonum ac legum diversitas loquentium de materia infrascripta qua in dispersa diversa volumina...Idcirco ego Iacobus de Baysio...quamvis indignus ad dissolvendam diversitatem ...imperator Adrianus. Martinus de Fano. Signantur prout crede [...].\"", "Fol. 11r-13r: \"[rubr.] Incipit breviarium ad omnes materias in iure canonico inveniendas. [text] Verborum superficie penitus resecata de talento...item utrum abstinentes sint vocati (?) tractari (?) viii q. v. secundus (?) [...].\"", "Fol. 13r-75v: \"[rubr] In nomine Domini amen. Incipit libelus super ordinem et causis mallorum dudum Perusii compilatus et postea Senis refformatus correctus et suppletus 1298. [text] Cum assiderem Perusii iam est diu...non solvit quia de facto pendebatur.'"], "520": ["This manuscript contains 3 different works. The texts on fol. 11r-13r and 13r-75v both have an entry in the IN PRINCIPIO database: the first is an anonymous treatise on Canon Law, and the second is a treatise written by the Italian scholar Alberto Gandino and completed in the year 1298, as the opening rubric says. Regarding the text copied on fol. 4r-11v, the closing rubric on fol. 11v mentions the scholar Martinus de Fano; nevertheless, the prologue ascribes the work to Jacobus de Baysio, a brother of the most famous Guido de Baysio, both important canonists."], "300": ["|3Original: |a76 leaves :|bpaper ;|c300 x 220 (215 x 115) mm bound to 305 x 225 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 05-03) and positive (Robbins MS 125)"], "852 8": ["CUL|bRBCAG|hRobbins MS 125|xCIN=JKN"], "700 0": ["Martino,|cda Fano,|dactive 1229-1272.", "Jacopo,|cde Baysio,|d13th cent."], "008": ["060811q13501400it ||||||||||||00|||lat||"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Super ordinem et causis mallorum ;|bBreviarum ad omnes materias in iure canonico inveniendis ; [Compilation on wills inheritance]."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "561": ["On inside back cover, written in pencil by a 20th century hand, there is the number \"125\"."], "500": ["Ms. codex.", "Fol. 4r-11v, title supplied by cataloger; fol. 11v-13r and 13r-75v, title from the opening rubrics.", "Collation: Paper, fol. i (modern paper) + 76 + i (modern paper); 1\u2074 (lacks fol. 4) 2\u00b9\u2076 (1 folio detached) 2-4\u00b9\u2076 5\u00b9\u00b2 (lacks of fol. 9-12). Watermarks: \"Huchet\" close but not identical to Briquet 7708; \"Arc\" very close to Briquet 780; a curvy lines with two circles on top, not in Briquet. Catchwords by the hand of the scribe in the bottom margin on verso, enclosed in a rectangle.", "Layout: Written in up to 70 long lines. No ruling and and no prickings visible. No later additions and no notes are visible.", "Script: Written in a neat cursiva libraria script, possibly by one hand, in brown ink.", "Binding: Bound in mottled tan-and-brown paper over pasteboard.", "Origin: Written in Italy, possibly in the second half of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 125."], "700 1": ["Gandino, Alberto,|dactive 13th century|tTractatus de maleficiis."], "090 8": ["Robbins MS 125"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=74;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS76": {"001": ["ocn691293976"], "260": ["Eichstatt, Germany,|c1580."], "040": ["BOL|eamremm|cBOL"], "520": ["Manuscript is of local historical and genealogical importance for the Trugenhofen family. The manuscript was compiled and copied in Eichstatt, in 1580, by one Kilian Geiger von Lewenstam (f. iiir). A modern description appears on the front pastedown."], "300": ["|3Original:|a35 leaves :|bpaper ;|c310 x 200 (225 x 135) mm, bound to 315 x 215 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-62) and positive (Robbins MS 76)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=47;fullview=yes"], "008": ["101210s1580 gw 000 0 ger d"], "099": ["Robbins MS 76"], "003": ["OCoLC"], "245 00": ["Berichts Ordnung zue Khuenberg inn denn Hofmarchen Trugenhofen unnd Bertoltzhaim."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["The first owner was Ruland von und zu Trugenhofen. His family coat of arms, including the initials R. V. V. Z. T., and a date of 1587, is found on fol. ir; his name and a date of 1580 is found on fol. iir."], "500": ["Ms. codex.", "Title from title page (fol iiir).", "Layout: Written in 25 long lines; frame ruled in ink.", "Script: Written in a cursiva currens script by one hand.", "Binding: Modern green paper over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 76."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts, December 2010."], "005": ["20101210012434.0"], "505 0": ["Fol. iir-35r: \"Berichts Ordnung zue Khuenberg inn denn Hofmarchen Trugenhofen unnd Bertoltzhaim. Wie solche vol allter hero befreit unnd gehalten worden ist. Beschreiben d\u00fcrch Kilianum Geigern von Lewenstam. Diser Zeitt Wonhafft zue Eistett. Anno Domini 1580.\""], "035": ["(OCoLC)691293976"], "546": ["In German, with section headings in Latin."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMSCould not find valid shelfmark": {"001": ["06-B4440"], "260": ["Italy,|c[between 1652 and 1663]"], "520": ["A collection of 191 letters, mostly copies, 142 of which are from Cardinal Camillo Astalli (Pamphili) and 42 of which are from Cardinal Fabio Chigi (elected Pope Alexander VII in 1655). The vast majority of Astalli's letters are dated 1653; the vast majority of Chigi's letters are dated 1654 (a year before he was elected pope). A few seals and addresses are present (fol. 49v, 109v, 110v, and 116v). Several of the 42 letters from Chigi concern Carlo Massimo's retinue in Madrid (Carlo Massimo was later the patron of Vel\u00e1zquez, Poussin, and other artists). The 142 letters from Pamphili pertain to many aspects of Innocent X's policy toward Spain, notably attitudes towards Cardinal Sandoval (letters 6 and 136), church scandals in Milan (letter 33), the Inquisition (letter 40), and control of Naples (letters 133 and 100). The collection includes a letter to Pamphili about Neapolitan corsairs (letter 138), one to Caetano signed by Cardinal Barberini (letter 25), and 2 letters from Innocent X (letters 79 and 83), one of which is to Philip of Spain. There are also two accounts of legal processes against clerics (letters 109 and 110). Two copies of a printed leaf tipped in between letters 121 and 122 and 145 and 146 bearing the title \"Innocentius PP. X. ad futuram rei memoriam\" 1663. Many blank leaves throughout."], "510 4": ["Phillipps, T. Cat. ms.|c7570."], "700 3": ["Colonna family.|4asn|4fmo|5CUL."], "852 8": ["CUL|bRBCAG|hIN PROCESS|xCIN=JKN"], "008": ["060912q16521663it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Lettere della Segretaria di Stato d'Innocentio [Decimo] a Mons[ignor] Caetano Arcivescovo di Rhodi nel tempo della sua Nuntiatura di Spagna"], "245 03": ["[A collection of letters concerning various religious and political matters between Italy and Spain]"], "546": ["Italian and Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "300": ["404 leaves :|bpaper ;|c267 x 194 ( 210 x 167) mm bound to 280 x 205 mm."], "561": ["Manuscript was once in the collection of the Colonna family (their red stamp visible depicting a column within a circle), as well as in the collection of Sir Thomas Phillipps (his no. 7570). At base of spine below the Phillipps catalog number is a small green dot, 6 mm in diameter."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (2 watermarks visible: one depicting a bird atop a trimontium enclosed in a circle with a \"G\" above; one depicting an anchor enclosed in a circle with a star above), fol. ii (modern paper) + 404 + ii (modern paper); collation indiscernible due to tightness of binding.", "Layout: Variable up to 45 lines per page.", "Script: Written in a cursive script by many hands.", "Binding: Contemporary calf over pasteboard (rebacked). Title in gilt on red leather reads \"Miscellanea Manus.s.\"", "Accompanying materials: A few seals present (fol. 49v, 109v, 110v, and 116v).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 166."], "700 1": ["Alexander|bVII,|cPope,|d1599-1667.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "LEADER": ["00000cam 2200000 a 4500"], "090 8": ["|hIN PROCESS"]}, "RobbinsMS99": {"001": ["06-B738"], "245 10": ["Summa de poenitentia ;|bSumma de matrimonio."], "505 0": ["1. fol. 1r-115v: Summa de poenitentia; fol. 1ra-1rb: \"[prologue] Quoniam ut ait ieronimus secunda post naufragium tabula est semper confiteri ne imperitia ministrantis predictam tabulam mergi contingat aliquando naufragantes...a me praeter propositum cogitans inserta caritate fraterna corrigas et emendes\"; fol. 1rb-116rb: \"[contents] De symonia...De sepulturis\"; \"[text] Quoniam inter crimina ecclesiastica symoniaca heresis optinet primum locum...quod habet specialiter locum in luxuria et gula Contra hoc dicitur computuerunt iumenta in stercore suo.\""], "505 8": ["2. fol. 116rb-130vb: \"[text] ...contrahuntur sponsalia aut ambo minores scilicet infra xii aut xiiii annum et supra septennium...si tamen vir egisset penitentiam et uxor monita nollet agere penitentiam sed perseveraverat in ad< ulterio>.\""], "520": ["Raymond of Penaforte's Summa de poenitentia and Summa de matrimonio. One folio is missing the fifth sexternion (between fol. 52 and 53) and another in the tenth sexternion (between fol. 115 and 116); at least one full quire is also missing causing the text of the Summa de matrimonio to begin imperfectly at Title 1.6 \"De effectu sponsalium,\" and end abruptly in the middle of Title XXII.5 \"De divortio propter fornicationem.\""], "100 0": ["Raymond,|cof Pe\u00f1afort, Saint,|d1175?-1275."], "852 8": ["CUL|bRBCAG|hRobbins MS 99|xCIN=JKN"], "008": ["060216s1290 enk||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "581": ["S. Raimundus de Pennaforte, Summa de paenitentia, ed. Xaverio Ochoa and Aloisio Diez, in Universa Bibliotheca Iuris 1/B (Rome: Commentarium pro religiosis, 1976); ibid., Summa de matrimonio, ed. Xaverio Ochoa and Aloisio Diez, in Universa Bibliotheca Iuris 1/C (Rome: Commentarium pro religiosis, 1978); Alfred J. Horwood, \"Helmingham Hall: the Seat, in Suffolk, of John Tollemache, esq., M. P: Report of Manuscripts in the Library of Helmingham Hall,\" in Great Britain Historical Manuscript Commission. First Report. Appendix (London, [s.n.], 1870), 60-61; Thomas Kaepelli, Scriptores Ordinis Praedicatorum Medii Aevi, vols. 1-3 (Romae ad S. Sabinae: 1970-1980), 3: 285; Stephan Kuttner, \"Zur Entstehungsgeschichte der Summa de casibus poenitentiae des hl. Raymund von Penyafort.\" Zeitschrift der Savigny-Stiftung f\u00fcr Rechtsgeschichte: Kanonistische Abteilung 39 (1953): 419-34; Sotheby & Co., Catalogue of Highly Important Manuscripts and Printed Books from the Library at Helmingham Hall, Suffolk, the Property of the Rt. Hon. Lord Tollemache...Which Will be Sold at Auction...Tuesday, June 6th, 1961. [London, 1961]; and ibid., Catalogue of Medieval Manuscripts and Valuable Printed Books from the Library of Helmingham Hall, Suffolk, the Property of the Rt. Hon. Lord Tollemache...Which Will be Sold by Auction by Messrs. Sotheby & Co., 14th June, 1965 [London, 1965]."], "546": ["Latin."], "300": ["|3Original:|a130 leaves :|bparchment ;|c188 x 133 (127 x 84) mm. bound to 193 x 142 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-82) and positive (Robbins MS 99)"], "561": ["Manuscript was once part of the library of Lord Tollemache at Helmington Hall, supposedly acquired shortly before or after 1600 by Sir Lionel (Diamond and Hood, Catalog, 44). It was sold to Vatchell by Sotheby's (Lot 7) on June 14, 1965 and to A.G. Thomas, again by Southeby's (Lot 21), on July 10, 1972. \"Summula Raimundi\" and \"Raimundus\" visible in a 17th century cursive hand."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i + 130 ; 1-4\u00b9\u00b2 5\u00b9\u00b9 6-9\u00b9\u00b2 10 \u00b9\u00b9 11\u00b9\u00b2 ; no signatures or catchwords visible.", "Layout: Written in 2 columns of 40 lines; frame ruled in lead with double inner bounding lines.", "Script: Written in a gothic script by one hand (marginal corrections and additions/commentary in two additional hands: one contemporary with the copying of the manuscript; the other slightly later, possibly from the early 15th. century).", "Decoration: Illuminated 5-line initial at the beginning of the first book drawn in red and blue with brown and green in-filling and long tendrils down the left margin and across the top; 2-line initials in alternating red and blue with in-filling of the opposite color and ink tendrils demarcate chapter headings; alternating red and blue paragraph headings throughout.", "Binding: Leather stamped binding over wooden boards with intersecting vertical and horizontal lines framing mythological animals; binding displays stamp of the binder Nicholas Spierinck. Front flyleaf and pastedown are from a 14th or 15th century missal; back pastedown contains medieval monophonic Nativity carols probably from the 15th century.", "Origin: Written in England, probably towards the end of the 13th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 99."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, February 2006."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[England, |cbetween 1275 and 1299]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=61;fullview=yes"], "090 8": ["Robbins MS 99"]}, "RobbinsMS16": {"001": ["ocn245202894"], "260": ["Rome?,|c[ca. 1606]"], "040": ["BOL|eamremm|cBOL"], "520": ["The manuscript is a collection of texts and letters concerning the Venetian interdict, compiled for Cardinal Ascanio Colonna (1560-1608). Made a cardinal by Pope Sixtus V in 1585, Colonna was viceroy of Aragon between 1602 and 1604, and was appointed Bishop of Palestrina by Pope Clement VIII on 5 June 1606. The prefatory letter in the manuscript was written shortly after the latter appointment, on the Day of the Cross (14 September) 1606. The name of the compiler (who is also the author of the first letter) was cut off when the several different texts were bound as one manuscript. From the prefatory letter, however, it can be inferred that he was a longtime client and a familiar of Cardinal Colonna's household."], "300": ["|3Original:|a122 leaves :|bpaper ;|c236 x 197 (204 x 122) mm bound to 277 x 230 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-93) and positive (Robbins MS 16)"], "600 14": ["Colonna, Ascanio,|d1560-1608."], "008": ["080904s1606 it 000 0 ita d"], "099": ["Robbins MS 16"], "003": ["OCoLC"], "245 00": ["Antipologetico o vero esamine dell' apologia incerti auctoris pro Reipub[licae] Veneta[e] Epi[scopi]s."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "561": ["On verso of the end flyleaf is a note in pencil: \"Venezia et Saint Si\u00e8ge,\" suggesting that the book in its present binding was once in the hands of a Frenchman."], "500": ["Ms. document.", "Title from title page (fol. 1r)", "Collation: Paper, fol. i (modern paper) + 122 + i (modern paper); modern foliation in pencil skips 104, i.e. fol. 104 is actually 105; 1-3\u00b9\u2070 4\u2076 5-6\u00b9\u00b2 7\u2076 8\u00b9\u00b2 9\u2076 10\u00b9\u2074 11\u00b9\u2076 13\u2076.", "Layout: Written in 18 long lines. Catchwords at the end of each verso.", "Script: Written in a neat cursive script by various hands.", "Binding: Modern white hand-made paper over pasteboard. Title on spine: \"Apologia incerti auctoris.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 16."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "005": ["20080904125212.0"], "505 0": ["Fol. 1r-36v: \"Antipologetico o vero esamine dell'apologia incerti auctoris pro Reipublicae Venetae Episcopis -- fol. 37r-39v: \"Discorso in cui si mostra che i Venetiani in questa loro disobedienza verso il Papa fanno contra l'obligo loro, et l'osservanza di loro maggiori\" -- fol. 40r-47v: \"Lettera al Proveditor Moro di Terraferma\" -- fol. 48r-51v: \"Copia di una lettera della Signoria di Genova in risposta alla Republica di Venetia\" -- fol. 52r- 59v: \"Lettera de Veronesi a Bresciani\" -- fol. 60r-77v: \"Instruttione et Avvertimenti all'Illustrissimo Signor Don Annibale di Capua per la sua legatione di Venetia del modo che ha da tenere nel trattare et negotiare con quella Serenissima Republica\" -- fol. 78r-102v: \"Rimostranza fatta a un clarissimo Venetiano contra la Republica\" -- fol. 103r-122v: \"Ravedimento o sia protesta d'un clarissimo Senatore Veneto scritta al Rettore H. suo fratello continente le cause per le quali rinuntia in tutto et per tutto all'oppinione del Serenissimo Donati et alla sua fattione adherendo alli commandamenti di Sua Santita.\""], "035": ["(OCoLC)245202894"], "546": ["Mostly in Italian, some Latin."], "LEADER": ["00000ntc 2200000Ia 4500"]}, "RobbinsMS241": {"001": ["06-B3799"], "260": ["Germany,|c[between 1700 and 1725]"], "505 0": ["Fol. 2r-7r: \"Recessus lipsiensis confectus ibidem anno 1665 Executioni datus Erffurti anno 1667 wie auch die Versicherung \u00fcber die Freiheit un das Exercitium der Religion Augspurglicher Confession von dem durchlauchstigsten hochw\u00fcrdigen f\u00fcrsten und Herrn Johann Philippen...\" ; fol. 7v-25v: \"Recessus lipsiensis confectus ibidem anno 1665 executione datus Erffurti anno 1667 mediatore Serenissimi et Potentissimi Domini Domini Electoris Saxoniae Georgii Secundi inter Reverentissumum Eminentissimum ac Celcissimum Principem ac Dominum Dominum Archi Episcopum Electorem Moguntii ex una et Serenissumum Domum Saxoniae Vinariensem ex altera parte praetensa in civitate Erffurtensi hinc inde Jura concernens\" ; fol. 26r -30r: \"Vergleich zwischen Sachsen Weimar und denen Carth\u00e4usern zu Erfurth Anno 1643\" ; fol. 30v-42v: \"Executions Recessus 1667\" ; fol. 43r-65r: \"Folgen die Beilagen\" ; fol. 65v-66v: blank."], "520": ["This manuscript contains a transcription of various documents having to do with Erfurt's passing from a Saxon protectorate to a territory of the Archbishop of Mainz in 1667 as the result of a resolution from a recess in Leipzig (referred to in the text as the \"Recessus lipsiensis\") in 1665. The documents also discuss Erfurt's consequent loss of status as a free imperial city and the religious freedoms of Catholics and Lutherans within its borders. Also included is a transcript of a settlement, reached in 1643, between Saxe-Weimar and the Carthusians regarding Erfurt. Pages very brown and aged-looking."], "852 8": ["CUL|bRBCAG|hRobbins MS 241|xCIN=JKN"], "561": ["On front pastedown written in brown ink in an 18th cent. hand is the underlined letter \"M\" and the words \"cost 20 gl\"; also at the top of the front pastedown is written in modern pencil \"64 [-----]\" and \"EDV 504731.\""], "008": ["060809q17001725gw ||||||||||||00|||ger|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Recessus Lipsiensis confectus ibidem an[n]o 1665. Executioni datus Erffurti an[n]o 1667..."], "245 00": ["[Collection of documents concerning the status of the city of Erfurt during the years 1643 and 1667]"], "546": ["German and Latin."], "300": ["66 leaves :|bpaper ;|c318 x 203 (260 x 150) mm bound to 323 x 205 mm."], "600 10": ["Sch\u00f6nborn, Johann Philipp von,|d1605-1673."], "500": ["Ms. codex.", "Title supplied by cataloger; added title from title page (fol. 2r).", "Collation: Paper (2 watermarks visible: both depict castles, one symmetrical with dome in the middle and two conical looking towers on each side with orbs on the top; one asymmetrical with a tower in the middle with two orbs, the smaller atop the larger, and a side tower with a cross on top), fol. 66; 1\u00b2 2-3\u2078 4\u00b9\u00b2 5-6\u2078 7\u2076 8\u2078 9\u2074; catchwords on the verso side of each folio at the bottom.", "Layout: Written in 28 long lines; left-hand margin on recto and verso guided by folding.", "Script: Written in a cursive script by one hand.", "Binding: Decorated paper over pasteboard. Binding very worn: layers of pasteboard separating particularly at corners; spine is torn in a few places.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 241."], "583": ["|zCataloged from existing description and in hand by Tyler Lange and Jennifer K. Nelson, August 2006."], "090 8": ["Robbins MS 241"], "600 00": ["Johann Georg|bII,|cElector of Saxony,|d1613-1680."], "610 10": ["Erfurt (Germany)", "Saxony (Electorate).|bElector (1656-1680 : Johann Georg II)", "Saxe-Weimar-Eisenach."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS276": {"001": ["06-B3552"], "260": ["[Northern France or Germany,|cbetween 1450-1475]"], "505 0": ["Fol. 1rv: \"[table of contents] De treuga (sic) et pace XXXIII...; fol 2r-327v: [text] // per decretum gratie...ubi statutum quoque //.\""], "245 00": ["[Summa and notabilia on the Decretales Gregorii IX, on the Liber VI and on the Clementinae]"], "520": ["This manuscript is a kind of extensive commentary on the Decretales, the Liber VI and the Clementinae with notabilia, organized in the form of a treatise. The text is acephalous and incomplete. On fol. Ir, there is a French title supplied by a 20th century hand, in pencil, that reads : \"Glosse des Decretales de Gregoire et une partie du Corpus Iuris Canonici.\""], "852 8": ["CUL|bRBCAG|hRobbins MS 276|xCIN=JKN"], "008": ["060727q14501475fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio:|aper decretum gratie"], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "300": ["327 leaves :|bparchment ;|c145 x 100 (100 x 65) mm bound to 160 x 120 mm."], "561": ["On inside back cover, there is a tiny label that reads \"05.55\", possibly from a former owner."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 327 + i (modern paper) ; 1-42\u2078, but the first quire lacks of fol. 1 and the last one lacks of fol. 3-6. Horizontal catchwords on the right side of the lower margins, on verso of each quire, although not always visible. Original foliation in arabic numerals that goes from 2 to 385, in black ink, in the upper right corner of each folio recto. Modern foliation in pencil.", "Layout: Written in 19 long lines, below top line. Occasionally glossed in the outer margins, which are quite wide. Ruled in lead and dry point. Prickings in the outer margins.", "Script: Written in cursiva libraria gothic script.", "Decoration: Simple red and blue initials, mostly on 1-2 lines, throughout the text. Many initials touched in yellow. Section headings written in textualis libraria script.", "Binding: Parchment over pasteboards, with semi-Yapp edges, 17th or possibly 18th century.", "Origin: Written in Northern France or Germany, in the third quarter of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 276."], "090 8": ["Robbins MS 276"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS46": {"001": ["ocn463503360"], "245 10": ["Notationes iuris."], "040": ["BOL|eamremm|cBOL"], "520": ["This manuscript comprises mostly Andreas Coquus \"Notationes iuris\"; topics in alphabetical order with many leaves left blank to allow for additional material. The remainder of the manuscript contains other legal texts, including Johannes de Deo (Jo\u00e3o de Deus) \"Concordia decretorum cum titulis decretalium,\" the sections of the Decretals in verse, and alphabetical table of notes, ending imperfectly in \"I.\" Much of the text is illegible because of pervasive water damage and fading."], "300": ["202 leaves :|bpaper ;|c202x145 mm, bound to 210x150 mm."], "260": ["Italy, 1485."], "099": ["Robbins MS 46"], "003": ["OCoLC"], "581": ["Kuttner, \"Repertorium\" 159, 372-73, 382-83; Kuttner et al., \"Catalogue of Canon and Roman Law Manuscripts\" 2:147; Pierre Michaud-Quantin, \"Sommes de casuistique et manuels de confession au moyen \u00e2ge\" (Louvain: Nauwelaerts, 1962), 26-7."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Long lines ruled in hard point; number of lines per page varies greatly.", "Script: Writtin in a cursiva libraria script by one hand.", "Binding: Cream paper with red and blue dots over pasteboard; spine is lacking.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 46."], "035": ["(OCoLC)463503360"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=32;fullview=yes"], "700 0": ["Joa\u00f5 de Deus,|d1732-"], "008": ["091105s1485 it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, November 2009."], "100 1": ["Coquus, Andreas."], "546": ["Latin."], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20091105063108.0"], "505 0": ["Fol. 1r-163v: [Andreas Coquus, Notationes iuris] -- fol. 164r-167: -- fol. 167v-168r: -- fol. 168v: -- fol. 170rv: < Notationes> -- fol. 171r-175v -- fol. 176rv: -- fol. 176v: -- fol. 177r-192r: [fragment: A-I]"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS268": {"001": ["06-B3522"], "245 10": ["Decretales VI libri [with the Glossa Ordinaria of Johannes Andreae] ;|bDe regulis iuris ; [rules of Canon Law]"], "505 0": ["1. Fol. 1r: \"[rubric] Incipiunt rubricae sexti libri domini Bonifatii...de regulis iuris\" ; fol. 2r-204v: \"[text] Bonifatius episcopus servus servorum Dei...[gloss] Quia preposterus est ordo...[text]...gerendi negociis abesse contingat. [glossa]...de iudiciis i. s. longius. Io[hannes] An[dree].\""], "505 8": ["2. Fol. 226v-227r: \"[rubric] De regulis iuris. [text] Non est novum ut aliquibus...iam licet noviter. Io[hannes] Andree.\"", "3. Fol. 205r-226v: \"[text] Beneficium ecclesiasticum non potest licite...an id quod petetur deberetur.\""], "520": ["Well-preserved manuscript of the Liber sextus of Boniface VIII with wide margins, and several marginal notes written in a cursive script, added later. Book used in the juridical schools."], "100 0": ["Boniface|bVIII,|cPope,|dd. 1303."], "852 8": ["CUL|bRBCAG|hRobbins MS 268|xCIN=JKN"], "700 0": ["Giovanni d'Andrea,|dapproximately 1270-1348."], "260": ["[Avignon?,|cbetween 1350 and 1370]"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060726q13501370fr ||||||||||||00|||lat|d"], "581": ["Illuminating the law. Legal manuscripts in Cambridge Collections. An exhibition in Cambridge, Fitzwilliam Museum, 3 Nov-16 Dec 2001, Brepols 2001 / Susan L'Engle, Robert Gibbs"], "546": ["Latin."], "300": ["228 leaves :|bparchment ;|c395 x 225 (325 x 200) mm bound to 410 x 260 mm."], "561": ["Provenance: fol. 1r, notes of ownership by a 15th century hand: \"Io Giuliano fui presente a questo. Io Ionito B[ar]nero fui presente a questo.\" ; fol. 2v: \"MCCCCXXXI die ultimo octobris Iohannis.\" On the bottom page of fol. 2r, rubbed coat of arms. Rubbed ownership note on fol. 1r."], "500": ["Ms. codex.", "Title from opening rubric (fol. 1r); opening rubric (fol. 205r); for the text beginning at fol. 226v, title supplied by cataloger.", "Collation: Parchment, fol. ii (modern paper) + 228 + ii (modern paper) ; 1-9\u00b9\u2070 10\u2078 11\u00b9\u00b2 12\u2078 13-14\u00b9\u00b2 15-19\u00b9\u2070, 20\u00b9\u00b9 (199 is a detached folio) 21-22\u00b9\u2070 23\u2074 (fol. 225 and 227 are detached folios) ; horizontal catchwords for quires 1- 9, 21-22, vertical catchwords for quires 10-20. Contemporary foliation in arabic numerals, from 1 to 22, on folios 205 to 226, on top of each folio recto, in the right corner.", "Layout: Fol. 2r-204v written in two columns with continuing marginal glosses (the number of lines for the text and for the glosses may vary in a significant way); fol. 205r-227v written on two columns of 54 lines, no glosses.", "Written in textualis libraria script, similar to the littera bononiensis.", "Decoration: One primary 9-line illuminated initial on fol. 2r; one secondary 2-line illuminated initial on fol. 2r, and two more on fol. 4r, on 3-4 lines. Grotesque on fol. 50r, 79v. Several pen flourishing initials in red and violet and blue and red throughout the text.", "Binding: Modern binding in medieval style, light brown leather over pasteboard, 2 clasps, 4 decorative raised bands.", "Origin: Written and decorated in Southern France, possibly Avignon, during the third quarter of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 268."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "LEADER": ["00000ctm 2200000 a 4500"], "090 8": ["Robbins MS 268"]}, "RobbinsMS71": {"001": ["ocn607380124"], "245 10": ["[Inspeximus of Pope Innocent VIII's bull \"Apostolice sedis intuitus\" of 27 May 1487]"], "040": ["BOL|eamremm|cBOL"], "003": ["OCoLC"], "035": ["(OCoLC)607380124"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=42;fullview=yes"], "008": ["100415s1488 it 000 0 lat d"], "099": ["Robbins MS 71"], "505 0": ["Fol. 1r-39v: \"[text] In nomine d[omi]ni noverint universi et singuli presentes litteras sive presens publicum transsumpti instrume[n]tum lecturi quod nos Dominicus de Mangoneschis canonicus narniensis juris utriusque doctor reverendissimi que in christo patris et d[omi]ni d[omi]ni Raynaldi de Ursinis...Datum et actu[m] Floren[tiae] in archiep[iscop]ali palatio flore[n]tin[o] anno i[n]carnationis d[ome]nice millesimo quadringe[n]tesimo octuagesimo ocatvo indictione sexta die vero septima me[n]sis maii pontificatus s[an]ctissimi in Christo patris et d[omi]ni nostri d[omi]ni I[n]nocencii divina providentia pape octavi anno quarto. Presentibus ibidem prudentibus et discretis viris ser Dominico Antonii Johannis de Figino et Ser Angleo Antonii de Marinis civibus et notariis Florentinis testibus ad premissa vocatis habitis et rogatis.\" -- fol. 39v: \"[text] Et ego Paulus Amerigi Bartoli Grassi civis floren[tinus] imp[er]iali auctoritate judex ordinarius atque notarius publicus floren[tinus] necnon archiep[iscop]alis curiae floren[tiae]...Ideoque me subscripsi signoque et nom[ine] meis solitis et consuetis una cum praefati r[everendissi]mi d[omi]ni archiep[iscop]i floren[tini] sigillo signavi su[m]psi et publicavi in fide[m] et testimonium om[n]i[u]m et sing[u]l[orum] permissum rogatus neque [---].\" -- fol. 40rv: blank."], "100 1": ["Mangoneschi, Domenico dei."], "546": ["Latin."], "520": ["Domenico dei Mangoneschi was Vicar General to Rinaldo Orsini, Archbishop of Florence. The original bull by Innocent VIII includes transcripts of the following bulls issued by former popes: Alexander IV, \"Devotionis tue precibus\" (13 May 1259) and \"Religionis vestre\" (1 April 1259); Benedict IX, \"Dum levamus\" (11 February 1304); Clement VI, \"Regimini universalis ecclesie\" (23 March 1346); Urban VII, \"Sacer ordo vester\" and \"Sacre religionis\" (both of 14 April 1380); Boniface IX, \"Sincere devotionis affectus\" and \"Pastoralis officii debitum\" (both of 13 January 1398); John XXIII, \"Sacer ordo vester\" (7 October 1412) and \"Super gregem dominicum\" (26 March 1414); and Martin V, \"Sedis Apostolice providentia,\" \"Sacre religionis,\" and \"Sacer ordo vester.\" The Inspeximus was notarized on 7 May 1488 by Paolo Amerigo Grassi, ordinary judge, public notary, and chancery clerk for the Archbishop of Florence (notarial sign on f. 39v), in the presence of Domenico de Figino and Angelo de Marino, witnesses."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the library of St. Annunziata in Florence."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (parchment) ii-iii (paper) + 40 + i-ii (paper) iii (parchment); 1-3\u00b9\u2070 4\u2079; catchwords at the end of each quire.", "Layout: Written in 25 long lines, below top line; frame ruled in ink.", "Script: Written in a humanistic script by one hand.", "Decoration: On fol. 1r is a 15-line decorative initial in pink, yellow, green, and blue on golden ground, and a floral border in blue, red, green, and gold in Italian Renaissance style; two putti holding a shield bearing inscription \"Ordinis servorum.\" Marginal notes.", "Binding: Blind-stamped leather over wooden boards with fillets and stamps representing human silhouettes; one of the two leather fore edge clasps is lacking; spine torn at top and bottom; gilt edges. Parchment flyleaves are from a copy of the Liber cum glossa ordinaria, France, 14th century.", "The document was drafted in Florence in 1488 at the request of Giovanni Filippo de Pizleone, then prior of Santa Maria Annunziata, a Servite convent (f. 1r), to verify papal privileges and immunities previously granted to the order.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 71."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, April 2010."], "005": ["20100415032839.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "260": ["Florence, Italy,|c1488."], "300": ["|3Original:|a39 leaves :|bparchment ;|c235 x 160 (155 x 90) mm, bound to 245 x 170 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-58) and positive (Robbins MS 71)"]}, "RobbinsMS25": {"001": ["ocn245542291"], "245 10": ["Liber primus decisionum R[everendissimi] P[atris] D[omini] Hieronimi Pamphilij Rotae auditoris."], "040": ["BOL|eamremm|cBOL|dBOL"], "003": ["OCoLC"], "035": ["(OCoLC)245542291"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=115;fullview=yes"], "008": ["080905q16751725it 000 0 lat d"], "099": ["Robbins MS 25"], "505 0": ["Fol. 1r: title page ; fol. 2r-7v: Index of decisions arranged alphabetically by diocese ; fol. 1 (i.e. fol. 10) - 203v: \"[text] \"[Decisio prima] Romana domus de Vicecomitibus Mercurii 4 Julii 1584. Proposui dubium in causa Romana...[Decisio 123] Ravennatensis bonourm lunae? 20 Julij 1582 Ut satisfacerem agentibus...\""], "100 1": ["Pamphilj, Girolamo,|d1544-1610."], "546": ["Latin."], "520": ["Contains 123 decisions of the Roman Rota by rotal auditor Girolamo Pamphilj between 1584 and 1587."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN\\"], "610 20": ["Catholic Church.|bRota Romana."], "500": ["Title from title page.", "Collation: Paper, fol. 221(foliation starts on first page of text, i.e. fol. 9r; last 10 leaves unnumbered); 1-20\u00b9\u2070 (fol. 1 is pastedown) 21\u00b9\u2074 22\u2078; catchwords at the end of each verso.", "Layout: Written in 21 long lines.", "Script: Written in a cursive script by two hands: hand one (fol. 1r-14v) is very neat; hand two (fol. 15r-end) is more rushed and less legible.", "Binding: Limp vellum binding.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 25."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "005": ["20080908123505.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "260": ["Rome,|c[between 1675 and 1725]"], "300": ["|3Original:|a221 leaves :|bpaper ;|c268 x 200 (203 x 110) mm bound to 271 x 204 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-98) and positive (Robbins MS 25)"]}, "RobbinsMS20": {"700 12": ["Wolsey, Thomas,|d1475?-1530."], "001": ["ocn318936238"], "245 10": ["Letters and instructions from King Henry VIII and Cardinal Wolsey to several ambassadors."], "040": ["BOL|eamremm|cBOL"], "520": ["Copies of diplomatic correspondence, ca. 1515-1524, between Henry VIII and Cardinal Wolsey, and the following: the Bishop of Bath (Thomas Wolsey?) and Thomas Hannibal (both English ambassadors to the Vatican); the Bishop of London (Cuthbert Tunstall?); Sir Richard Sampson (Dean of the Chapel Royal); Sir Richard Farmingham; Sir Richard Wingfield (Chancellor of the Duchy of Lancaster); Sir Thomas Boleyn (Treasurer to the King's Household); Richard Pace (Cardinal Wolsey's, and afterwards Henry VIII's, secretary and English ambassador to the Swiss cantons and the State of Venice); and Margaret of Savoy. The original letters belong to a period not earlier than 1515 when Richard Pace was sent by Cardinal Wolsey on a mission to induce the Swiss to attack Francis I of France on their side of the Alps. Richard Sampson, here addressed as Dean of the King's Chapel, was appointed to that post in 1516. Cardinal Wolsey, referred to as a papal legate (to England), was appointed to the position (in latere with Cardinal Campeggio) in 1518 by Pope Leo X. Thomas Boleyn, here mentioned as the Treasurer to the King's Household, was appointed to that post in 1522. That same year he and Richard Sampson were sent as ambassadors to Valladolid, where Sampson was to remain for several years as resident ambassador. Richard Pace was dispatched to Venice immediately after Pope Leo X's death (2 December 1521) to further Cardinal Wolsey's interest in the papal throne. The original letters by Cardinal Wolsey to the Bishop of Bath and Thomas Hannibal, ambassadors to Vatican, were composed in 1523, the year of Clement VII's election. It appears that Hannibal's chief mission in Rome between 1522 and 1524 was to attempt to secure an enlargement of Cardinal Wolsey's powers as a legate. In 1524 Hannibal and Peace were commissioned, jointly with Clark, to negotiate a treaty for a peace or truce with France by the mediation of the pope. Richard Wingfield, who in 1520 succeeded Thomas Boleyn as ambassador to France, was appointed Chancellor of the Duchy of Lancaster in 1524."], "260": ["England ,|c[between 1675 and 1699]"], "099": ["Robbins MS 20"], "700 1": ["Sampson, Richard,|dd. 1554.", "Bullen, Thomas,|cSir,|db. 1477.", "Pace, Richard,|d1482?-1536.", "Wolsey, Thomas,|d1475?-1530.", "Tunstall, Cuthbert,|d1474-1559."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Once belonged in the library of Sir Richard Grosvenor, first Earl Grosvenor (1731-1802; his signature [?] on f. 2r), or possibly his grandson, Richard Grosvenor, second Marquis of Westminster (1795-1869). The book was numbered as MS 10 in the library (library plate on front inside cover: \"case xxi no. 10\"), which was hosted at the family estate at Eaton (\"MSS Eaton\" at foot of spine)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Script: Written in a late secretary script by one hand.", "Binding: Dark leather binding.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 20."], "300": ["|3Original:|a277 leaves :|bpaper ;|c305 x 190 (275 x 120) bound to 310 x 195 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-37) and positive (Robbins MS 20)"], "100 0": ["Henry|bVIII,|cKing of England,|d1491-1547."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=111;fullview=yes"], "700 0": ["Marguerite,|cde France, duchesse de Savoie et de Berry, |d1523-1574."], "008": ["090421q16751699enk 000 0 eng d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, April 2009."], "546": ["English."], "003": ["OCoLC"], "852": ["CUL|bRBCAG|xCIN=JKN"], "005": ["20090421051301.0"], "505 0": ["Fol. 1r-12r: A coppy of my Lord legates letter to the Kings orators at Rome the xxvth of March -- fol. 13r-18r: King Henry VIII his letter to his ambassador the Bishop of Bath att Rome -- fol. 19r-26r: Cardinall Woollsey his letter to Mr. Sampson and Mr. Farmeingham residing with the Emperour -- fol. 27r-41v: A coppy of my Lord legates letter sent to the ambassadors att Rome upon knowledge of the Popes election -- fol. 42r-60v: A coppye of my Lord legates letter to my Lord of Bathe -- fol. 61r-82r: My Lord legates letter to Mr. Sampson, ambassador -- fol. 82v -91v: A coppy of a letter of my Lord legate to the ambassador -- fol. 92r-99v: A coppy of Mr. Farmingham and Mr. Sampsons letters to Cardynall Woolsey -- fol. 100r- 101v: A coppy of Mr. Pace his letter to the Kings highness -- fol. 102r-end: Instructions from King Henry VIII and Cardinal Wolsey to several ambassadors."], "035": ["(OCoLC)318936238"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS3": {"001": ["06-B2596"], "245 10": ["[Statuta synodalia ex mandato Concilii provincialis Gnesnensis promulgata Wratislaviae anno Domini 1423]"], "505 0": ["Fol. 1r-42v: Statuta synodalia ex mandato Concilii provincialis Gnesnensis promulgata Wratislaviae anno Domini 1423; fol. 1r-v: Protocollum Synodi Dioecesanae Wratislaviensis anni 1423; fol. 1v-42r: Statuta provincialia in Welun tradita; fol. 1v-2r: Praefatio; fol. 2r-3r: Tenor litterarum Ioannis papae vicesimitertii depositi; fol. 3r-4r: Tenor bullae Martini papae V; fol. 4r-42r: Statuta Concilii provincialis provinciae Gnenensis anni 1420; fol. 42r-42v: Protocollum Synodi Dioecesanae Wratislaviensis anni 1423; fol. 43r-45v: Transsumptum litterae confirmatoriae Nicolai V Concordati Viennensisanni 1448; fol. 43r: Instrumentum Federici de Emmerberg Archiepiscopi Salisburgensis; fol. 43r-45v: Tenor litterarum confirmatoriarum Nicolai papae V; fol. 45v: \"Declaratio beneficorum reservatorum in concordatis positorum.\""], "520": ["Transcript of the diocesan statutes of the Provincial Council of Gniezno of 1420, promulgated in Wratislavia in 1423. Marginal notes in 2 different hands. At the bottom of fol. 1r a note in a later (17th cent.?) hand reads: \"Statuta synodalia ex mandato \"Concilii provincialis Gnesnensis promulgata Wratislaviae anno Domini 1423.\" Modern foliation continuous, however codex is missing a folio between fol. 36 and 37."], "530": ["Selected digital images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=99;fullview=yes"], "110 2": ["Catholic Church.|bProvince of Gniezno (Poland).|bSynodus Provincialis."], "852 8": ["CUL|bRBCAG|hRobbins MS 3|xCIN=JKN"], "008": ["060601q14481499gw ||||||||||||00|||lat||"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, June 2006."], "300": ["|3Original:|a45 leaves :|bpaper ;|c263 x 192 (195 x 125) mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-12) and positive (Robbins MS 3)"], "500": ["Ms. codex.", "Title from note in a later hand (fol. 1r).", "Collation: Paper (watermark similar, but not identical to, Briquet \"T\u00eate de boeuf,\" 14598), fol. 45 + ii; 1-3\u00b9\u00b2 4\u00b9\u2070\u207d\u207b\u00b9\u207e.", "Layout: Written in 42 long lines; ruled in lead and dry point.", "Script: Written in a b\u00e2tarde script by one hand.", "Decoration: Initial in red and blue ink on fol. 1; titles rubricated.", "Binding: Binding lacking; 2 flyleaves at end of text.", "Origin: Jakub Sawiki (\"Synodalia Polonica in einer Handschrift der Robbins Collection in Berkeley\" in Bulletin of Medieval Canon Law 1 (1971), 57-61) suggested that this unbound 15th century manuscript was once part of a manuscript (now lost?) of the Prince-Bishopric of Breslau (sign. A.III.q.1) from Weidenau in the Prussian province of Silesia (today Vidnava).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 3.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), gBR817 .G572 1423."], "090 8": ["Robbins MS 3"], "260": ["[Germany,|c1423]"], "581": ["P\u00e9ter Erd\u00f6, \"Die Glossen in der Handschrift MS 3 der Robbins Collection in Berkeley: Ein Beitrag zur Frage der wissenschaftlichen Bearbeitung des Partikularkirchensrechts im Mittelalter,\" Archiv f\u00fcr katolisches Kirchenrecht 164 (1995): 390-414; Jakub Th. Sawicki, \"Synodalia Polonica in einer Handschrift der Robbins Collection in Berkeley,\" Bulletin of Medieval Canon Law 1 (1971), 57-61."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS30": {"001": ["ocn246763068"], "260": ["Spain,|c1752."], "040": ["BOL|eamremm|cBOL"], "520": ["An imperfect copy of an older manuscript preserved in the Library of the Colegio Mayor in Alcala. The latter is a collection of texts pertaining primarily to the Councils of Toledo of 1565-66 and 1582-83. The documents were originally collated by Juan Bautista P\u00e9rez (1534-1597) -- also known as Juan Bautista P\u00e9rez Rubert -- canon and archivist of the Toledo cathedral and later Bishop of Segorbe. Since ca. 1566, and for the entire duration of the 1582-83 council, P\u00e9rez was the secretary of Cardinal de Quiroga (see article 14). In this capacity and at the request of Pope Gregory XIII he drafted the text of three volumes (1575, 1576, and 1580, respectively) containing the variants of the Spanish councils. The original manuscript now in the Colegio Mayor includes extensive marginal commentaries by Juan Antonio de las Infantas, Dean of the Toledo cathedral; these are copied in the Robbins manuscript in a second hand on fol. 35r, 48r, 69v, 75v, 122r, 125v, 127r, 128v, and 132r. The Robbins manuscript also includes the index compiled by de las Infantas for the Colegio Mayor manuscript, fol. 215r-220v. Copies of several different articles in the Robbins manuscript exist in the Library of the Toledo cathedral and in the Library of the Colegio de la Compa\u00f1a de Jesus (manuscript collection of Juan de Mariana) in Toledo."], "510 4": ["Philipps, T. Cat. ms.|c18028."], "099": ["Robbins MS 30"], "245 00": ["[Documents pertaining to the provincial councils of Toledo, 1565-56 and 1582-83]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Philipps (two of his labels present, 18028 and 20843; penciled note in book on verso of flyleaf identifies this as Philipps 18028). The number 1345 is also written in pen at base of spine."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. 220 (manuscript is paginated, some errors; pagination skips blank pages); 1-8\u00b9\u2070 9\u2078 10-21\u00b9\u2070 22\u00b9\u00b2; gatherings signed 1-22 in top, right hand corner.", "Layout: Written primarily in 18 long lines; fols. 185r- 187r are layed out in two columns of over 30 lines.", "Script: Main text written in a neat cursive script by one hand. Marginal notes by Juan Antonio de las Infantas, Dean of the Toledo cathedral, added to manuscript in a second hand.", "Binding: Contemporary mottled calf binding with gilt ecclesiastical coat of arms in compartments of spine. Title on spine reads \"Papeles varios.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 30."], "035": ["(OCoLC)246763068"], "610 20": ["Catholic Church.|bProvince of Toledo (Spain).|bProvincial council."], "505 0": ["Fol. 2r: \"[foreword] Este Tomo contiene varios papeles recogidos por Don Juan Bautista P\u00e9rez, canonigo de Toledo, y despues obispo de Segorbe, la maior parte de los quales pertenece al Concilio Provincial de Toledo A\u00f1o de 1582, y 1583...con un indice de cada Papel hacho por el Dn. Don Juan Antonio de las Infantas, Dean de la Santa Iglesia de Toledo, hombre eruditissimo, y quien entre otros se le dejo al Colegio, despues de su muerte\" -- fol. 3r-35r: \"Instruccion de lo que se ha de hacer en la convocacion, prosecucion, y celebracion delos concilios provinciales\" - - fol. 36r-48r: \"De hiis, que tractari poterunt in Concilio Provinciali\" -- fol. 49r-66r: \"Relacion del discurso que tubo il Concilio que se celebro en la Santa Iglesia de Toledo el A\u00f1o de MDLXV [1565] y MDLXVI [1566]\" -- fol. 67r-75v: \"[Tres] Cedulas Reales [of King Phillip II of Spain] para que se guarde lo decretado en el Concilio de Trento y en el Provincial de Toledo\" [Madrid, 4 December 1564; Escorial, 1 June 1566; Madrid, 13 July 1567] -- fol. 76r-79r: De habendis sinodis provincialibus haec sequentia statuuntur in conciliis et iure canonico\" - - fol. 80r-86r: \"Que personas han de asistir en el Concilio Provincial y tener voto en el\" -- 87r-92v: \"Las Ceremonias que se guardaran en la primera session\" -- fol. 93r-106r: \"Actos y decretos de la Primera Session\" -- fol. 107r- 114v: \"Las dificultades que se apuntan sobre la tercia parte de los frutos de las dignidades para distribucioners\" -- fol. 115r-116v: \"Los lugares que se han de ver en los Concilios Toledanos\" -- 117r-119r: \"Que legos no tienen voto en el Concilio\" -- fol. 120r-132r: [Consultas y cartas varias: Consulta del Doctor Calderon, canonigo de Toledo; consulta anonima; Doctor Neroni, vicario de Madrid, carta al Cardinal de Quiroga; Padre Pedro Riva, risposta dada al Cardinal de Quiroga; consulta anonima] -- fol. 133r-146r: Memorial de un Religioso presentado por el Reverendissimo Se\u00f1or Obispo de Ja\u00e9n\" -- fol. 147r-150r: \"Sessione 25 capitulo primo De reformatione\" -- fol. 151r- 153r: \"Memoria de los canonigos que son al presente en esta Santa Iglesia\" -- fol. 154r: \"Lo que gana un canonigo en esta Santa Iglesia de Toledo cada dia y las horares lo siguiente\" -- fol. 155r-163r: \"Resoluciones que se tomaron en diversas congregaciones de este Santo Concilio Provincial de Toledo\" -- fol. 164r-184v: [Consultas sobre el canon de reformatione matrimonii: Pedro Nu\u00f1ez de Toledo, Los matrimonios clandestinos; Gutierre de Pisa, Sobre el Canon 1 De reformatione matrimonii sess. 24 Concilii Tridentini; Pedro Nun\u00f1ez de Toledo, Parecer sobre el Canon primero De reformatione Matrimonii sess. 24 Concilii Tridentini; Gutierre de Pisa, De reformatione matrimonii sess. 24 Concilii Tridentini] -- fol. 185r-187r: [Questiones y adbertimientos acerca de algunos decretos del Concilio Tridentino] -- fol. 188r-192v: \"Apuntamientos que se han embiado sobre los decretos hechos en el Santo Concilio Provincial de Toledo\" -- 193r-200v: \"Adbertimientos sobre lo contenido en algunos de los decretos del Concilio Provincial de Toledo que se embian por orden de su Magestad de Campo maior a primero de Marzo 1583\" -- fol. 201r-209v: \"Reformacion de las Escuelas de Ni\u00f1os en esta Ciudad de Toledo 1582\" -- fol. 216rv: [King Philip II of Spain, Carta al Cardenal Arzobispo de Toledo, 22 Febrero 1583 -- fol. 211r-212r: [Anonimo: Lo que se ofrece cerca de los apuntadmientos que embio Su Magestad en los oficios de las festas propias del Arzobispado de Toledo] -- fol. 215r-220r: Index with commentary."], "650 0": ["Councils and synods|zSpain."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "008": ["080908s1752 sp 000 0 spa d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "546": ["Mostly Spanish, some Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080908052258.0"], "300": ["|3Original:|a220 leaves :|bpaper ;|c295 x 205 mm (237 x 125) bound to 305 x 215 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-4) and positive (Robbins MS 30)"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS160": {"001": ["06-B4219"], "260": ["Italy,|c[between 1700 and 1750]"], "505 0": ["1. Fol. 1r-78v: \"Animadversio critico diplomatica in autographus bullae Urbani Papae IV etsi universae urbis ecclesie et datum abbati et conventui monasterii Montis Verginis apud urbem veterem idibus ianuarii indictione VII incarnationis Dominicae anno MCCLIV (sic - should be 1264) Pontificatus vero Domini Urbani Papae IV anno III.\""], "505 8": ["2. Fol. 79r-123v: Quaestiones and Probationes.", "3. Fol. 125r-128v: \"Perci\u00f2 lastarei la proibitione Pontificia nella sua generalit\u00e0.\"", "4. Fol. 129r-132v: \"Alcune osservazioni fatte nella vita nella vita (sic) di San Francesco di Sales composta in lingua francese par Monsier Marsollier et tradotta dal Signor Dottor Salecini Froventino.\"", "5. Fol. 133r-134v: \"S. Augustini Sententia circa peccatum originale ab omnibus contractum excepto Christo.\"", "6. Fol. 135r-170v: \"Theologicum examen iudicium et censura illarum quinque propositionum\" (the topic is duelling).", "7. Fol. 171r-174v: \"Ristretto del libro [sopra la giurisdizione spirituale].\"", "8. Fol. 175r-182v: \"Censura theologica in Iohannem Clericum [Amstelodami 1699].\"", "9. Fol. 183r-186v: \"Ordonnance de Monseigneur l'Archevesque de Paris pour la tonsure [1696].\"", "10. Fol. 189r-190v: \"Editto di Monsignor Arcivescovo di Parigi sopra preparamento al santissimo ordine [1696].\"", "11. Fol. 191rv: [Sopra un giuramento in tempo di conclave]", "12. Fol. 193r-204r: \"Ordonnance et instruction pastorale de Monseigneur l'Archevesque de Paris portant condemnation du livre in titule Exposition de la foi tonchant la grace et la predestination imprime a Mons. chez Gaspard Migeot [1696]\"", "13. Fol. 205r-231v: [Vita di Beato Brandano da Siena]"], "520": ["A collection of texts on various theological topics. As evidenced by the different sized folios throughout the book and the variation in the handwriting, it is clear that most of these texts were written separately and bound together at a later date. They were not originally intended to be a single, coherent codex, which is the form that they find themselves in now."], "300": ["231 leaves :|bpaper ;|c268 x 198 (245 x 105) mm bound to 296 x 212 mm."], "510 4": ["Phillipps, T. Cat. ms.|c7552."], "852 8": ["CUL|bRBCAG|hRobbins MS 160|xCIN=JKN"], "008": ["060830q17001750it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["[Miscellaneous theological texts]"], "546": ["Latin, Italian and French."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "561": ["In ink on front flyleaf is written \"ON 61 286/25 G\" and what appears to be a brief description in pencil \"(386) pp, 20 ff, (14) pp, 322 pp., plus 12 blank leaves.\" At base of spine is number \"61.\" Manuscript was once in the collection of Sir Thomas Phillipps (his no. 7552)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. 231; 1\u2076\u207d\u207a\u00b2\u207e 2-8\u00b9\u2070 9\u2076 10-16\u2074 17\u2076\u207d\u207a\u2076\u207e 18-19\u2074 20\u00b2 21\u2076 22\u2078\u207d\u207a\u2074\u207e 23\u2078 24\u2074 25\u2078 26\u2074 27\u2076\u207d\u207a\u00b2\u207e 28\u2076 29-31\u00b2 32\u00b9\u2070 33\u00b9\u2076 34\u00b9\u2070\u207d\u207a\u00b9\u207e; only quires 1-8 signed in contemporary Arabic numerals in upper left hand corner (fol. 1r-78v).", "Layout: Various, written in up to 34 long lines.", "Script: Written in a cursive script by at least 12 hands.", "Binding: Bound in grayish brown paper over pasteboard, possibly original; leather bands visible inside front and back cover. Binding very loose. Title written in ink on spine reads \"Materie Div[ine] M + S\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 160."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 160"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS19": {"001": ["06-B4040"], "245 10": ["[Novella super III, IV et V Decretalium]"], "520": ["This manuscript is a very tidy and neat copy of the commentary written by Giovanni d'Andrea on the Decretales of Boniface VIII. Since it does not have many marginal notes or additions, it was clearly not intended to be a working copy."], "710 2": ["Chiesa di San Bernardino (Verona, Italy).|4asn|4fmo|5CUL."], "260": ["[Germany,|cbetween 1425 and 1450]"], "246 2": ["|iSecundo folio: |ahospicia commatrum (?)"], "581": ["Ioannes Andreae, In quinque Decretalium libros novella commentaria, 5 vols., Venetiis, apud Franciscum Franciscium Senensem, 1581; reprint, Torino, Bottega d'Erasmo, 1963."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["One of the early owners was Gabriele Verit\u00e0 of Verona, son of Benedetto, who had purchased it from a certain Marco Santagata: see the ownership note on fol. 367v: \"Ista novella est mei Gabrielis filii domini Benedicti de Veritate de Verona Empta a domino Marco de Sancta Agata.\" Later, Gabriele became a Minorite friar and, in expiation of his sins, he bequeathed the book to the church of St. Bernard in Verona: see fol. 367v: \"Hunc librum legavit Dominus Gabriel de Veritate nunc vero frater Gabriel ordinis Minorum observantie loco Sancti Bernardini Verone in remissionem suorum peccatorum.\" The manuscript was once in the R. H. Charlton collection, then recorded in the sale by Anderson (New York, 12 December 1914, no. 16) to G. D. Smith and in the sale by the American Art Society (New York, 24 February 1925, no. 439) to Dawson. It then became part of the collection of Mrs. Milton E. Getz of Beverly Hills, California. At some point the manuscript was in the library of Joseph M. Gleason (ex libris on bookplate inside front cover: a man in curial robes is writing at his working table; the motto, written in a scroll, reads: \"Tamdiu discendum est quamdiu vivas\"). It was acquired for the Robbins Collection in 1970. On inside front cover are glued 2 pieces of paper, possibly taken from bookdealers catalogues; another typed sheet of paper is pasted on flyleaf ir, with the description of the manuscript and the number \"82551\". On flyleaf ir, written in pencil by a 20th century hand: \"Compilata. Decretale of Papa Boniface VIII. Glosses by Andrea.\""], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (watermark depicts a griffin, not in Briquet), fol. ii + 367 + ii; 1\u00b9\u2070 2-21\u00b9\u00b2 22\u00b9\u2070 23-30\u00b9\u00b2 31\u00b9\u00b2\u207b\u00b9. No contemporary foliation. Modern foliation on some folios, such as 215, 260, 299, 300, and 300, all of which are numbered in pencil in 20th century hand. Catchwords in the bottom margin in the right corner, mostly written in a scroll. Quire numbering in the right corner of the bottom margin, with Arabic numerals from 1 to 12. Prickings visible in the lower margins, sometimes simple, sometimes double.", "Layout: Written in two columns of 60-70 lines each. Wide margins. Frame-ruled in ink and dry point. Very few marginal notes.", "Script: Written in a cursiva libraria gothic script by one hand.", "Binding: Bound with blind tooled vellum over wooden boards, with brass corners and center pieces; parchment reinforcements at quire centers.", "Origin: Written in Germany during the second quarter of the 15th century. The manuscript was copied by Iohannes Wydenvelt; the colophon on fol. 260r reads: \"Explicit liber quartus Novelle domini Ioannis Andree per manus Iohanni Wydenvelt\" and the one on fol. 367v reads: \"Et sic est finis huius novelle per manus Iohannis Widenwelt.\" (cfr. Colophons 11851, sub voce Iohannes Weidenfeldt)", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 19."], "LEADER": ["00000ctm 2200000 a 4500"], "300": ["367 leaves :|bpaper ;|c410 x 290 (285 x 180) mm bound to 425 x 300 mm."], "530": ["Selected digital images available in Digital Scriptorium."], "100 0": ["Giovanni d'Andrea,|dapproximately 1270-1348."], "852 8": ["CUL|bRBCAG|hRobbins MS 19|xCIN=JKN"], "008": ["060822q14251450gw ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "546": ["Latin."], "700 1": ["Verit\u00e0, Gabriele.|4asn|4fmo|5CUL.", "Santagata, Marco.|4asn|4fmo|5CUL.", "Getz, Milton E.,|cMrs.|4asn|4fmo|5CUL.", "Gleason, Joseph M.|4asn|4fmo|5CUL."], "505 0": ["1. Fol. 1r-214v: \"[rubr.] De vita et honestate clericorum. [text] Finito tractatu iudiciorum a quibus clerici quantum possunt abstinere debent...Dicit Ieronimus super Malachiam : quod regula scripturarum est in manifestis non exterminare que scripta sunt. Cum igitur satis sit manifestemus (?) habere. Ioannes Andree. [rubr.] Explicit liber tercius novelle domini Ioannis Andree per manus.\"; 2. Fol. 215r-260r: \"[text] Postquam satis tractavimus ea que spectant a clericos, ad ea que spectant ad laycos stilum vertamus...Et contra pelagianos vel [...] michi cure non est quid Aristotiles sed quid apostolus doceat. [rubr.] Explicit liber quartus novelle domini Ioannis Andree per manus Iohanni Wydenvelt.\"; 3. Fol. 262r-367v: \"[rubr.] Incipit liber quintus de accusacionibus inquisicionibus et denunciacionibus rubrica. [text] Proxime tractavimus de accusatione matrimonii et de divorciis...quod de hebreo transtulerunt septuaginta idest (?) fiat fiat, ut in epistola ad Marcellam octava scribit ipse Ieronimus. Et sic est finis huius novelle per manus Iohannis Widenvelt et est secunda pars. [rubr.] Explicit secunda pars Novelle domini Iohannis Andree super tribus libris Decretalium.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=110;fullview=yes"], "090 8": ["Robbins MS 19"]}, "RobbinsMS75": {"001": ["06-B4229"], "245 10": ["[Lectura super quinque libris Decretalium]"], "505 0": ["1. Fol. 1r-2r: Tituli Decretalium; 2. fol. 2r-9v: [Tabula Decretalium]; 3. fol. 10r-91v: \"[text] Fecit Deus duo luminaria magna (Gn 1, 16)...semper in generalibus specialia intelliguntur ff. e. e. Semper quantum tantum speciale derogat generali ut dictum est sub tytulus de rescriptis. [rubr.] Expliciunt.\""], "520": ["A very neat copy of the \"Lectura super quinque libris Decretalium\" by Henricus de Merseburg, also known as Henricus Minor. The manuscript is written by a professional scribe and shows very few marginal additions and marginal notes."], "100 0": ["Henricus,|cde Merseburg."], "852 8": ["CUL|bRBCAG|hRobbins MS 75|xCIN=JKN"], "246 2": ["|iSecundo folio: |aDe magistris"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060831q12501300fr ||||||||||||00|||lat|d"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["|3Original: |a91 leaves :|bparchment ;|c193 x 135 (145 x 90) mm bound to 200 x 145 mm.", "|3Copy: |a1 microfilm reel :|bnegative and positive (Robbins MS 75)"], "561": ["On flyleaf Ir, the number \"50\" is written in the middle of the page, presumably by a 16th century hand."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i + 91; 1\u2074 2\u2078\u207b\u00b3 3-6\u2078 7\u00b9\u00b2 8\u2078\u207b\u2074 9 -11\u2078 12\u00b9\u00b2\u207b\u00b2. No contemporary foliation. Quire numbers in the middle of the bottom margin, on verso, by the hand of the scribe in Roman numerals.", "Layout: Written in two columns, 38 lines for each column. The table of contents, fol. 2r, is written on 4 columns, 38 lines for each column. Ruled in ink and dry point. Running titles in the upper margins.", "Script: Written in a textualis libraria script, by at least two, perhaps three different hands but contemporary to each other.", "Decoration: Fol. 10r, a 8-line pen flourishing initial, red and blue. Red and blue alternating penworked initials throughout the text, mostly on one or two lines. Red rubrics. Red and blue alternating paragraph marks. Red running titles in capital letters, in the upper margins.", "Binding: Brown leather over wooden boards (possibly 15th century), repaired; two clasps, missing. Title on spine: \"Decret. Libr. V.\"", "Origin: Written in France during the second half of the 13th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 75."], "090 8": ["Robbins MS 75"], "260": ["[France,|cbetween 1250 and 1300]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=46;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS52": {"001": ["ocn463483213"], "260": ["Italy or France,|c[between 1681 and 1699]"], "040": ["BOL|eamremm|cBOL"], "520": ["Collection of transcriptions, in various hands, of documents concerning the dispute of Louis XIV and Innocent XI over regalian right."], "581": ["William Henley Jervis, \"History of the church of France from the Concordat of Bologna, A.D. 1516, to the Revolution,\" volume 2, \"The Gallican Church: A History of the Church of France from the Concordat of Bologna, A.D. 1516, to the Revolution\" (1872), chapter II: 23-59. For the text on fol. 9-14r: cf. Pierre F\u00e9ret, La facult\u00e9 de th\u00e9ologie de Paris et ses docteurs les plus c\u00e9l\u00e8bres (A. Picard et fils: 1906): 360. For the text on fol. 33: cf. Robert Wodrow, \"The history of the sufferings of the church of Scotland from the restoration to the revolution, \" (Blackie: 1839, vol. 3): 368."], "510 4": ["Phillipps, T. Cat. ms.,|c7354 & 7779."], "099": ["Robbins MS 52"], "245 00": ["[Dispute intorno alla regalia in Francia]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Once part of the collection of Sir Thomas Phillips (his nos. 7354 & 7779), and of that Frederic North, Earl of Guilford (his armorial bookplate on the inside front cover)"], "500": ["Ms. codex.", "Title from a note in pencil on the front pastedown.", "Collation: Modern foliation in pencil; former pagination on ff. 129v-149r: pp.2-39; f. 134 is an insertion (addition to treatise is in a different hand; stub is glued down to f. 133v.); fol. 8, 15-16, 36, 40, 60-62, 84, 116, 122, 151 are blank.", "Binding: Vellum over pasteboard; title on spine printed in gilt on dark leather label: \"Dispute intorno all[a] regalia in Francia. MS.\"", "Accompanying materials: The codex included a printed insert: Innocent XI, \"Paternae Charitati,\" 1682. This is now kept separately as Robbins Document 101.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 52."], "600 00": ["Louis|bXIV,|cKing of France,|d1638-1715.", "Innocent|bXI,|cPope,|d1611-1689."], "035": ["(OCoLC)463483213"], "505 0": ["Fol. 1-7: Excerpt from Trait\u00e9 de la Regale by Charles d'Aubery (Bk. 3, ch. 1, pub. 1678) and Response -- fol. 9- 14r: \"Ragioni contro la pretensione della regalia\" -- fol. 17- 32: \"Anonymi regalium seu regaliorum confutatio\" -- fol. 33: \"Protestatio cleri Gallicani, 1682\" -- fol. 34-35 : Innocent XI to Jean Cerle, Vicar general of Pamiers, 1 January 1681 (Latin) -- fol. 37-39r: \"Cleri Gallicani de ecclesiastica potestate declaratio\" -- fol. 41-46: Documents in French: a) letter from the Bishop of Pamiers to the Archbishop of Paris; b) letter from the Francois, Bishop of Pamiers to the Archbishop of Toulouse (8 May 1680); c) Last will and testament of Francois Estienne de Caulet, Bishop of Pamiers (18 October 1677). Date and conditions of death precede text (7 August 1680); d) Letter from the Bishop of Pamiers to the Archbishop of Toulouse et al. on the judgment given by the Archbishop of Toulouse, 01 September 1677 and 18 October in Pamiers -- fol. 47-48: \"Editto del Re sopra la dichiarazione fatta dal clero di Francia delli suoi sentimenti circa la potest\u00e0 ecclesiastica\" (Translation of Louis XIV's edict of March 1682) -- fol. 49-50r: \"Copia voti in quo fuit Dominus Chamillard Doctor Sardonicus\" -- fol. 51-52: Letter from the vicars of the ecclesiasical chapter of Pamiers to Innocent XI (Latin) -- fol. 53-54r: Letter from Innocent XI and response from Louis XIV, 1680 (Latin) -- fol. 55r: Letter, Joseph, Archbishop of Toulouse to Innoncent XI, 1680 (Latin) -- fol. 56r: Letter, Inncocent XI to the chapter and canons of Pamiers, 1680 (Latin) -- fol. 57-59: Letter from Pope Innocent XI to King Louis, 1679 (Latin, \"Breve iii\" noted in margin; \"Capitulo Appamiensis\" written on 61v.) -- 63-66r: 2 letters, Archbishop of Adrianople (Latin, \"Breve i, ii\" noted in margin; \"Archiepiscopo Tolosano\" written on 62v.) -- fol. 67-78: \"Lettera giuridica di Mons. Vescovo di Pamiers scritta a Monsignor Arcivescovo di Tolosa\" (on not being able to absolve Signore Palarino from excommunication) -- fol. 79-83: \"Arresto della corte del Parlamento sopra la copia del Breve del Papa (January 1681)\"; excerpt from the register of Parliament, signed Dongois (79v, 83v) -- fol. 85-89r: \"Lettera ad Sanctisimum Divinum Nostrum Papam Innocentium XI Vicarii Capitularis Ecclesiae Appamiensis referentis erumnas et penas passas ab eo, et aliis insistentibus contra regaliam\" -- fol. 89r-92r: \"Ristretto delle cose occorse nell'affare della regalia\" -- fol. 92v- 97r: \"Riposta al ristretto delle cose occorse nell'affare della regalia -- fol. 97r-110: \"Memorie intorno la regalia\" -- fol. 111-115: \"Riposta al ristretto\" (same as 92v-97r, different hand) -- fol. 117 -121r: \"Ristretto delle cose occorse nell'affare della regalia\" (same text as 89r-92r different hand from both 89r-92r and 111-115) - - fol. 123-124: \"Relation de ce qui s'est pass\u00e9 a Agen en l'affaire des Religieux -- fol. 125-128r: \"Remonstrance de l'assemblee generale du clerg\u00e9 de France faite au Roy par Monsigneur l'Archevesque coadiuteur de Reims\" -- fol. 129- 149r: \"Trait\u00e9 de la R\u00e9gale. Partie IV\" -- fol. 150: Conclusion (French) -- fol. 152-153r: \"Lettera circolare dell'Agenti Generali del Clero di Francia alli Arcivescovi del Regno."], "650 0": ["Regalia|zFrance.", "Prerogative, Royal|zFrance.", "Church and state|zFrance.", "Patronage, Ecclesiastical."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "008": ["091105q16811699xx 000 0 lat d"], "583": ["|zCataloged from existing description from Luminita Florea and in hand by Pamela Diaz, November 2009."], "546": ["Latin, Italian, and French."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20091105125042.0"], "300": ["|3Original:|a153 leaves :|bpaper ;|c291 x 216 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-51) and positive (Robbins MS 52)"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS80": {"001": ["ocn727189636"], "245 10": ["De appellationibus."], "040": ["BOL|eamremm|cBOL"], "100 1": ["Gambiglioni, Angelo,|d15th cent."], "300": ["|3Original:|a114 leaves :|bpaper ;|c410 x 270 (265 x 180) mm bound to 420 x 290 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-64) and positive (Robbins MS 80)"], "260": ["Italy,|c1443."], "099": ["Robbins MS 80"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript once belonged to one Baldassare Rosetti(?) (his signature at the bottom of fol. 1r: \"Baldasar Ruseto\") and, in 1714, to Lodovico of the same family (his signature on 1r: \"Ludovicus Rosettus, 1714 30 aprile\")."], "500": ["Ms. codex.", "Title from explicit (fol. 114r).", "Collation: Paper, fol. iii + 114 + iv; 1-11\u00b9\u2070 12\u2078; decorative catchwords at the end of each quire.", "Layout: Written in two columns of 50 lines; ruled in lead.", "Script: Written in a semitextualis libraria script by one hand. Marginal notes in cursive in two different hands, one of which also penned an index of select sections on f. iiir (presumably the hand of Lodovico Rosetti (?), one of the former owners of the codex).", "Decoration: Paragraph marks in alternating red and blue ink.", "Binding: Bound in parchment manuscript fragments, one of which can be identified as a leaf from the Codex of Justinian (legible are the headings \"Ut actiones et ab herede et contra heredem incipiant\" (4.11) and \"Ne filius pro patre vel pater pro filio emancipato vel libertus pro patrono conveniatur (4.13)).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 80."], "035": ["(OCoLC)727189636"], "650 0": ["Roman law."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=49;fullview=yes"], "008": ["110526s1443 it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, May 2011."], "240 10": ["Lectura super titulo De appellationibus"], "546": ["In Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20110526035104.0"], "505 0": ["Fol. 1r-114r: \"Hec rubrica continuatur hoc ordine secundum raf[faelem]...et hic sit finis materie appellationum laus deo eius gloriose beate Katerine beato Ieronimo patronis amen 1461. Per angelus de arecio m[illesimo] cccc xliii die 5 semptembris [sic].\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS252": {"001": ["06-B3632"], "260": ["[Hungary, |cca. 1729]."], "505 0": ["Fol. 1r-102r: \"[rubr.] De processu iudiciario civitatum quorundam cisdanubianorum...de officiis procuratorum. [text] Causa seu actio iuridica quatenus...quae obscuriora videbuntur, illuminabitur. Fol. 21v-23r, 24v and 102v-135v are blank."], "520": ["The text in the manuscript is divided into seven major chapters: 1. De causae iuridicae definitione et divisione, 2. De processu iudicii origine et gradibus, 3. De processu iudicii in tres classes distributione, 4. De speciali consuetudine, 5. De ordinario magistruum cortuum, 6. De officiis causantium, 7. De officiis verorum procuratorum. On fol. iir there is a series of numbers: 1 1729 134567\", so possibly 1729 stands for the date of the manuscript, which seems reasonable."], "852 8": ["CUL|bRBCAG|hRobbins MS 252|xCIN=JKN"], "008": ["060731s1729 hu ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["De processu iudiciario comitatuum quorundam cisdanubianorum."], "546": ["Latin."], "300": ["140 leaves :|bpaper ;|c190 x 150 (150 x 100) mm bound to 200 x 155."], "561": ["On inside front cover, written in black ink, 19th century: \"8792 C. 42\"; written in pencil, 20th century: \"\"EDU 54858\". On inside back cover, written in pencil, 20th century: \"950- CHH 9903\". A violet stamp on the title page, fol. 1r, proves that the manuscript used to belong to the Egyetemi K\u00f6nyvt\u00e1r, The University Library of E\u00f6tv\u00f6s Lor\u00e1nd University, Budapest."], "500": ["Ms. codex.", "Title from fol. 1r.", "Collation: Paper, fol. 140, 1\u2076, 2-17\u2078, 18\u2076. No prickings and no contemporary foliation provided. Catchwords on each single folio (not only at the end of the quire), on verso, on the right of the bottom margin.", "Layout: Written in 22 long lines. Frame-ruled in dry point, possibly with the tabula ad rigandum.", "Script: Written in a tidy cursive with many abbreviation, brown ink. Chapter headings on fol. 1r and 25r are written in capital script.", "Binding: parchment over pasteboard. The parchment used as a cover is a fragment of an early 14th century manuscript containing Book of Jeremiah from the Bible.", "Origin: Written in Hungary, at the beginning of the 18th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 252."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "090 8": ["Robbins MS 252"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS257": {"001": ["06-B3750"], "245 00": ["Histoire des Etats Generaux /|cPar monsieur Freret."], "505 0": ["Pp. 1-428: \"[rubr.] Des Etats Generaux premier partie. [text] Les Etats ne sont autre chose q'une assemblee generale...tout ce qui regardoit la discipline militaire\"; pp. 429-473 blank."], "520": ["The manuscript contains a very detailed history of the Etats Generaux, starting from the Middle Ages and explaining the development of this institution through the centuries. The treatise is divided into paragraphs and provided with very detailed footnotes. The title page reads: \"Histoire des Etats Generaux par monsieur...Freret\" : an existing description of the manuscript ascribes the work to Nicolas Freret, but there is no evidence that can lead us to assume that this is actually one of his works. Some important parts of the text are underlined."], "852 8": ["CUL|bRBCAGE|hRobbins MS 257|xCIN=JKN"], "008": ["060808q18001820fr ||||||||||||00|||fre|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["French."], "583": ["|zCataloged in hand by Silvia Donghi, August 2006."], "300": ["473 pages :|bpaper ;|c240 x 170 (170 x 120) mm bound to 250 x180."], "561": ["On inside front cover, a bookplate by a former owner: a coat of arms in the shape of a crowned shield, containing three stags in a triangle formation, two on the top and one on the bottom. The bookplate is an engraving made by Pierre Gabriel Berthault and signed with his motto \"Le sage direxit\". Marbled paper used as flyleaves. The family to which the manuscript used to belong to is unknown."], "500": ["Ms. codex.", "Title from title page.", "Collation: Paper, fol. i (marbled paper) + 473 + i (marbled paper). Contemporary pagination in the outer corners.", "Layout: Written in 18 long lines. Many footnotes refer to the main text using lower-case letters.", "Script: Written by one very neat cursive hand, in brown ink.", "Binding: Brown leather over pasteboards, gilt tooled with a coat of arms in the middle of both plates: a crowned oval containing an \"X\" with a tassle in each quadrant. The oval is surrounded by garlands. A small flower gilt tooled on each corner. Gilt tooled spine with floral patterns and the title which reads: \"Histoire des Etats Generaux\". Edges red-painted.", "Origin: Written in France, possibly at the very beginning of the 19th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 257."], "700 1": ["Berthault, Pierre Gabriel,|d1737-1831."], "090 8": ["Robbins MS 257"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS48": {"001": ["06-B4266"], "260": ["[France,|cbetween 1300 and 1400]"], "505 0": ["1. Fol. 1r6v: \"[rubr.] Hic sunt redditus episcopatus Autissiodorensis. [text] Autissiodorum. Sigillum cum emendis valet circa V lib[rarum?] per annum. Tallia circa XX l[i]b[rarum?]. Census et decima Sancti Gervasii...pratorum circa X arpent[orum?] sunt domini episcopi.\"; 2. Fol. 7rv: fol. 7r-v: \"[rubr.] Hos redditus debet episcopatus annuatim. [text] Fabrice Sancti Stephani VI libr[arum?]. Capitulo XXXIIII super Toulevini (?) pro luminari angelorum et lampade trinitatis X...item capitulo XVI d. (?) et ob[?] pro sede Minorum capitulo II sol[idi] pro prato decani.\"; 3. Fol. 8r-11r: \"[rubr.] Hic incipit inventarium cartarum et privilegiorum que faciunt ad ius et iurisditionem episcopi Autissiodorensis et invenientur in scriniis suis signatis per ordinem alphabeti et ita scripta sunt et signata in hoc libro. [text] In scrinio signato per A invenientur littere sive carte que faciunt ad ius et iurisdictionem episcopi in civitate Autissiodorensis et pertinenciis. Item littere sancti Bernardi...in scrinio signato per T Invenientur littere de ordinibus fattis a domino episcopo et de nominibus ordinatorum.\"; 4. Fol. 11v-15v: \"[rubr.] De cordis. [text] Coustume de cordis et polanis et vinagium omnino sunt comitis exceptis illis que sunt de Sanctis Germano et Iuliano...episcopus et comes habunt stalla insimul in foro, et census in foro.\"; 5. Fol. 16r-66v: \"[rubr.] Hic incipit liber cartarum episcopi Autissiodorensis que invenientur in scriniis signatis per ordinem alphabeti; et primo continentur littere que faciunt ad ius et iurisdiccionem episcopi in civitate Autissiodorensis et pertinentiis in scriniis signatis per A. [text] In nomine sancte et indiviue Trinitatis. Ego Bernardus Clarevallensis vocatus abbas cognita...item littere de ordinibus fas a convi[?]o de gressibus Autissodorensis episcopo invenietur in scrinio signatus per T//.\""], "245 00": ["[Cartularium episcopi Autissiodorensis]"], "520": ["The cartulary is incomplete: manuscript contains copies of documents kept in scrinia of the abbey; the items following the scrinium marked \"Q\" are missing, but rubrics exist for charters kept in scrinia \"S\" and \"T.\" The first charter is probably a copy of the agreement drawn by Bernard de Clairvaux in 1145 settling the dispute between Bishop Hugues de Macon (1137-1151) and William II, Count of Nevers with regard to jurisdiction over clerics and laymen, and other related matters. Occasional 4th and 15th century marginal notes in Latin and French (the latter identifying locations and giving French names of places and an occasional date); one document in the scrinium marked \"F\" in a 14th-century hand that is different from the hand of the manuscript, in all probability a later addition. Large hole on fol. 28. Sewn tears in fol. 40 and 46."], "581": ["Constance Brittain Bouchard, Spirituality and Administration: The Role of the Bishop in Twelfth-Century Auxerre (Cambridge, Ma: The Medieval Academy of America, 1979), 54-55."], "852 8": ["CUL|bRBCAG|hRobbins MS 48|xCIN=JKN"], "008": ["060905q13001400fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a66 leaves :|bparchment ;|c283 x 221 (220 x 170) mm bound to 290 x 225 mm.", "|3Copy: |a1 microfilm reel :|bpositive (Robbins MS 48)"], "561": ["This manuscript used to belong to the church of St. Marthe, Auxerre (fol. 1r, ownership note written in a 16th century hand, partly cropped: \"De Sanctae Marthae\"); on the binding there is the coat of arms of Nicolas Colbert; the old inventory numbers and shelfmarks on font pastedown (\"Inventori\u00e9 premi\u00e8re partie chapitre unique seconde partie\"), fol. ir (\"Premi\u00e8re partie chapitre unique seconde partie 1741\"), and fol. 1r (\"Cott\u00e9 trois cent de l'Inventaire de 1755\" and \"Cott\u00e9 CC le vingt et un Septembre soixante et seize C. Miotte greffier du chapitre d'Auxerre\") are from the Chapter of Auxerre Cathedral."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i + 66 + i; 1-4\u2078 5\u2076 7-8\u2078 9\u2074. No contemporary foliation. Quires numbered on recto of each quire, using the ordinal numbers (cfr. the words: \"quartus\", \"quintus\"...still legible on some quires). Modern foliation in pencil, Arabic numerals, in the upper right corner on verso, by a 20th century hand.", "Layout: Written in 29 long lines, below top line. Ruled in lead.", "Script: Written in a textualis libraria script, by one hand.", "Decoration: Red rubrics; some initial touched in red; red running titles on the upper margin.", "Binding: 17th-century leather over pasteboard (veau tachet\u00e9), bearing the gilt armorial of the Colbert family. Title on spine: \"Cartulaire de l'\u00e9v\u00each\u00e9.\"", "Origin: Written in France during the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 48."], "700 1": ["Colbert, Nicolas,|d1628-1676.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 48"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=34;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS29": {"001": ["06-B2232"], "245 10": ["Casus decretorum."], "520": ["Fol. 3, 6, 9, 11, 43, 84, 94, 95, 113, 115, 117, 129, 132, 148, 150, 160, 164, 165, 192, 221, 277, 292, and 304 mended. On fol. 323r after the explicit is an added text written by the hand of the scribe that reads: \"Iste liber est scriptus qui scripxit (sic) sit benedictus. Amen.\" Marginal notes on fol. 8v, 58r, 182v, and 255r (erased), all post-dating the copying of the manuscript. The incipits of both prologue and text as well as the explicit of the tract match those in Ms. Vat. Lat. 1438."], "LEADER": ["00000ctm 2200000 a 4500"], "510 4": ["Kuttner, Stephan, et al., Catalogue of Canon and Roman Law Manuscripts|c1:246.", "De Ricci, |cp. 649.", "De Ricci, |cp. 1172."], "260": ["[Northern France,|cbetween 1280 and 1320]"], "246 2": ["|iSecundo folio:|ascilicet quod canonicum alii sunt decreta pontificum"], "581": ["Bartholomaeus Brixiensis [da Brescia], Casus Decretorum Bartholomei Brixiensis (In vrbe Basiliensi: per Nicolaum Kesler ..., v. Idus Augusti anno salutis millesimo quadringentesimo octuagesimo nono [9 August 1489])."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Early provenance not known. Manuscript was probably in Britain (possibly Wales) at one time and in the possession of a certian William (owner's marks in a late 14th/early 15th century hand visible on fol. 291v (\"Wyll\") and fol. 292r (\"Wyllyam\"). During the 17th century the manuscript was owned by Hugh Roberts (fol. 81r: \"Hugh Roberts 1673\"). In a modern hand (late 19th century or 20th century) is written on the inside front cover: \"Bartholomeus Brixiensis. Casus Decretorum. Unpublished MS of the 15th century.\""], "500": ["Ms codex.", "Title from opening rubric (fol. 1ra) and from explicit (fol. 323 rb).", "Collation: Parchment, fol. iv (modern parchment ) + 323 + iii (modern parchment) ; 1-16\u2078 17\u2076 18-25\u2078 26\u2076 27-33\u2078 34\u2076 35-40\u2078 41\u2076, plus the last folio detached. No original foliation is provided. The quire signing system consists of Roman numerals on the upper margins on recto (quire numbers) in the middle of the page; a small \"q\" followed by Roman numerals in the right corner of the upper margin (folio numbers, usually from i to iv)", "Layout: Written in 2 columns of 38 lines, below top line; ruled in lead; prickings visible in the outer margins. Catchwords in the bottom margins on verso, close to the right side, by the hand of the scribe.", "Script: Written in a textualis libraria script, by one hand.", "Decoration: Initials in red ink, some filled with drawings. Capital letters, paragraph signs, and line fillers in red ink. Two human faces drawn in light brown ink at the bottom of fol. 165v and 166r. Drawing of a red and black bird on fol. 271r.", "Binding: Bound in the 19th century, in brown leather over wooden boards, by F. Bedford (bottom of inside cover reads : \"Bound by F. Bedford\"); the title on spine reads: \"Casus decretorum Brixiensis\"; gilt edges.", "Written in France, possibly Northern France, in the last 2 decades of the 13th century or during the first 2 decades of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 29."], "300": ["|3Original: |a323 leaves :|bparchment ;|c205 x 142 (153 x 113) mm bound to 217 x 160 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-3) and positive (Robbins MS 29)"], "530": ["Selected digital images available in Digital Scriptorium."], "100 0": ["Bartolomeo,|cda Brescia,|d-1258."], "852 8": ["CUL|bRBCAG|hRobbins MS 29|xCIN=JKN"], "008": ["060516q12801320fr ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi and Jennifer K. Nelson, July 2006."], "546": ["Latin."], "700 1": ["Bedford, Francis,|d1799-1883.|4bnd|5CUL."], "505 0": ["Fol. 1ra: \"[prologue] Quoniam suffragantibus antiquorum laborantibus minores possunt interdum perspicacius intueri...posito igitur casu ubi praeces incipiant legendo litteram assignabis, nunc in positione casus dices ubi pars prima incipia (sic) vel secunda\" ; fol. 1ra-323rb: \"[text] Humanum genus. Casus iste sic ponitur: Dicitur enim hic quod duo sunt intstrumenta per que humanum genus regitur et gubernatur...tertio dicit quod spiritus sanctus non potest aliquid audire a filio quod ipse nesciat. Expliciunt Casus decretorum. Amen. [colophon] Iste liber est scriptus. Qui scripsit sit benedictus. Amen.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=117;fullview=yes"], "090 8": ["Robbins MS 29"]}, "RobbinsMS93": {"001": ["ocn662527619"], "245 10": ["Dictata v[iri] cl[arissimi] J[ohan] M[elchior] Kemper de jure naturae 1818-1819."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["A transcription of lecture notes taken by dictation during the academic year 1818-1819. The main text was copied just on the recto of each folio, with additional notes and corrections appearing on facing pages (i.e., the verso of the preceding folio)."], "260": ["Netherlands,|cafter 1819."], "099": ["Robbins MS 93"], "100 1": ["Kemper, Johan Melchior,|d1776-1824."], "246 08": ["Dictata de jure naturae"], "561": ["Gift from Mrs. James L. de Fremery. James de Fremery was Consul General for the Netherlands in San Francisco from 1863 to 1891. On the back pastedown is affixed a piece of brown paper with the number \"235887\" stamped on it, and below is written \"Kemper, J. M.\" Fol. 127r bears the stamp \"L38252.\""], "500": ["Ms. codex", "Title from title page.", "Collation: Paper, fol. i +131 + i; 1-6\u2074 7\u00b2 8-19\u2074 20\u2078(-2) 21-22\u2074 23\u2076 24\u2074 25\u00b3 26-33\u2074 (last fol is pastedown).", "Layout: Written in 26 long lines.", "Script: Written in a quick cursive script by one hand.", "Binding: Brown paper over pasteboard; leather spine with gilt pattern (bands). Title on spine in gilt letters on red background reads \"J. M. Kemper Dictata de jure naturae.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 93.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), g290 K32."], "300": ["|3Original:|a131 leaves :|b;|c210 x 165 (195 x 140) mm, bound to cover 215 x 170 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-76) and positive (Robbins MS 93)"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson."], "008": ["100907q18181819ne 000 0 lat d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 02": ["Praelectiones de jure naturae"], "852": ["BOL|bRBCAG|xCIN=JKN"], "546": ["Latin."], "003": ["OCoLC"], "700 1": ["De Fremery, James,|d1826-1899."], "005": ["20100907043757.0"], "505 0": ["Fol. 2r-8r: Prolegomena -- fol. 9r-49r: Pars I -- fol. 50r -125r: Pars altera -- fol. 126r, 127r: Index -- fol. 128r- 131v: blank."], "035": ["(OCoLC)662527619"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS292": {"001": ["ocn221732766"], "260": ["[S.l. : s.n.],|c1805."], "040": ["BOL|eamremm|cBOL"], "520": ["Unpublished \"Petite Eglise\" schismatic manuscript expounding the position of the French bishops who fled to London after the French Revolution and following the Concordat of 1801 between Pope Pius VII and Napoleon Bonaparte."], "300": ["104 leaves :|bpaper ;|c260 x 180 (245 x 140) mm bound to 260 x 190 mm."], "099": ["Robbins MS 292"], "245 00": ["Memoria dei vescovi Franzesi residenti in Londra che non hanno dato la loro dismissione."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "600 10": ["Dillon, Arthur-Richard,|d1721-1806."], "500": ["Ms. codex.", "Title from title page (fol. 1r).", "Collation: Paper, fol. i + 52 + i; 1-2\u00b9\u00b2 3\u2074.", "Layout: Written in 34 long lines.", "Script: Written in a neat 19th century script in brown ink. A few light marginal ink stains.", "Binding: Bound in a 19th century full, dark calf leather binding. Upper margin closely trimmed but with no loss of text. Paper flyleafs and pastedowns (pastedowns have writing on them - on the recto at the front and the verso at the back - before being pasted down, such that the writing is backwards and difficult to make out.", "Origin: The colopon in the manuscript makes reference to Cox and Baylis, printers who had published other, similar pamphlets of dissident bishops: \"De l'imprimerie de Cox et Baylis No. 75, Great Queen Street, Lincoln's Inn Fields a Londres.\" As yet there is no evidence that this pamphlet was ever published.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 292."], "600 00": ["Pius|bVII,|cPope,|d1742-1823."], "035": ["(OCoLC)221732766"], "610 20": ["Catholic Church|zFrance|xHistory|y19th century.", "Catholic Church|zEngland|xHistory|y19th century.", "Catholic Church|zFrance|xBishops|xHistory|y19th century.", "Petite Eglise."], "650 0": ["Church and state|zFrance.", "France|xChurch history|y19th century"], "008": ["080409s1805 xx 000 0 ita d"], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, April 2008."], "546": ["In Italian, with some Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080409054056.0"], "505 0": ["Fol. 2r-52v: \"[Text] Memoria dei vescovi Franzesi residenti in Londra che non hanno dato la loro dimissione. In Londra 23 [Octo]bre 1805 ; Un Breve di S.S. Pio VII dato in Roma in Santa Maria Maggiore il 15 Agosto 1805...Non vi disaproveremo se voi ricusate di fare cio' che prave insinuazioni ci avrebbero potuto suggerire (followed by note 181 which is a citation from book 10 of the Ius Canonicum) ; fol. 52v: List of fourteen names: Arthur Richard Dillon, Arch[ev\u00eaque] e Primate di Narbone, Louis Ev\u00eaque d'Arres, Joseph Francois Ev\u00eaque de Montpellier, Louis Andr\u00e8 Ev\u00eaque Conte de Noyon Pair de France, Jan Francois Ev\u00eaque de Lion, Emanuel Louis Ev\u00eaque de Perigueux, Pierre Augustin Ev\u00eaque de Avrances, Sebastien Michel Ev\u00eaque de Vannes, Henri Benoit Jules de Bethisy Ev\u00eaque de Us\u00e8s, Seignelay Colbert Ev\u00eaque de Rodez, Charles Eutrope Ev\u00eaque de Nantes, Philippe Francois d'Albignac Ev\u00eaque d'Angouleme, Alessandre Henri de Chauvigni Ev\u00eaque de Lombez, Etienne Jean Baptiste Louis des Halois (?) de la Tour Ev\u00eaque Nom[ine?] de Moulins.\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS145": {"001": ["ocm84650682"], "260": ["[Rome?,|c16--]"], "040": ["CUL|eamremm|cCUY"], "520": ["Discussion of canonical principles in four books."], "300": ["|3Original:|a516 pages :|bpaper ;|c205 x 147 (182 x 124) mm bound to 212 x 155 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-12) and positive (Robbins MS 145)"], "008": ["060821s16uu it 000 0 lat d"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "003": ["OCoLC"], "245 00": ["Ad canonicas institutiones."], "099": ["Robbins MS 145"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title from opening page of text (p. 1).", "Collation: Paper, 518 pp. (contemporary pagination in ink starting at fol. 3; first two unnumbered pages are part of the first quire; incorrect pagination after p. 445 as p. 448 follows it directly, skipping pp. 446-447); 1\u00b9\u2070 2\u00b9\u2074 3\u00b9\u2070 4\u00b9\u00b2\u207d\u207a\u00b9\u207e 5\u00b9\u2070\u207d\u207a\u00b9\u207e 6\u00b9\u2078 7\u00b2 8\u00b9\u2078 9\u00b2 10\u00b9\u2078 11\u00b2 12\u00b9\u2078 13\u00b2 14\u00b9\u2078 15\u00b2 16\u00b9\u2078 17\u00b2 18\u00b9\u2078 19\u00b2 20\u00b9\u2078 21\u00b2 22\u00b9\u2078 23\u00b2 24\u00b9\u2078.", "Layout: Written in up to 28 long lines.", "Script: Written in a cursive script by one hand.", "Binding: Vellum over pasteboard; cover nearly detached. Title written in ink on spine: \"Institu / Canonic.\"", "Origin: Author was probably attached to the Curia.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 145."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "005": ["20080129054118.0"], "505 0": ["Pp. 1-496: Ad canonicas institutiones ; pp. 1-21: Introduction ; pp. 21-183: Liber primus \"[text] De iure personarum...De professione religiosa et professis\" ; pp. 183-300: Liber secundus \"[text] De rebus...De rebus ecclesie non alienandis\" ; pp. 301-408: Liber tertius \"[text] De iudiciis...De in integrum restitutione\" ; pp. 408-596: Liber quartus \"[text] De accusationibus, denunciationibus et inquisitionibus...De dispensatione ab irregularitate\" ; pp. 497--500: blank ; pp. 501-507: Index ; pp. 508-512: blank."], "035": ["(OCoLC)84650682"], "546": ["Latin."], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS54": {"001": ["ocn471519396"], "260": ["Italy,|c[between 1676 and 1689]"], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Historical discourse on the origin and the development of regalian rights. The history makes reference to the resistance of the bishops of Alet and Pamiers to Louis XIV's declaration extending the droit de regale (regalian rights) over all of France, and their appeal to Pope Innocent XI."], "300": ["|3Original:|a62 leaves :|bpaper ;|c305 x 215 ( 280 x 150) mm bound to 315 x 220 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-52) and positive (Robbins MS 54)"], "510 4": ["Phillips, T. Cat ms.|c5441 & 7325."], "099": ["Robbins MS 54"], "245 00": ["Discorso istorico sopra l'origine e progressi della regalia."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 5441 & 7325). Stamp of the Libraria Colonna also present (fol. 1r and fol. 59v)."], "500": ["Ms. codex", "Title from beginning of text (fol. 1r)", "Layout: Written in 29 long lines.", "Script: Written in a neat, cursive script by one hand.", "Binding: Embossed parchment over pasteboard; part of parchment on back cover has been torn off; clasps lacking.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 54."], "035": ["(OCoLC)471519396"], "650 0": ["Regalia.", "Church and state."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "008": ["091130q16761689it 000 0 ita d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Pamela Diaz, November 2009."], "546": ["Italian, with marginal notes in Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20091130035326.0"], "505 0": ["Fol. 1r-59r: \"[text] Discorso istorico sopra l'origine e progressi della regalia. Le chiese e i vescovadi nelli primordii della fede d'altro non furon dotate, che dell'oblationi e decime che la piet\u00e0 de' fedeli a[i] sacerdoti di Christo somministrava...ne si dubita che dalla condotta di s\u00ec santo Pontefice, e s\u00ec pio, e veramente Christianissimo Re possino in altro terminare queste differenze che in maggior honore e gloria di Dio et esaltazione della Chiesa."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS186": {"001": ["ocm81336371"], "260": ["A Bruxelles :|bChez Pauwels ...,|c1787."], "040": ["CUY|cCUY"], "043": ["e------|ae-gx---"], "710 2": ["Holy Roman Empire.|bEmperor (1765-1790 : Joseph II)"], "650 0": ["Ecclesiastical law|zHoly Roman Empire|y18th century |xSources.", "Church and state|zHoly Roman Empire|y18th century.", "Popes|xPrimacy."], "245 04": ["Les Cent nullit\u00e9s :|bdes \u00e9dits, ordonnances, principes de l\u00e9gislation, & autres pieces qui ont paru sous le nom de l'Empereur Joseph II, sur les matieres eccl\u00e9siastiques & religieuses, jusqu'au 28 septembre 1784, adress\u00e9e \u00e0 l'Empereur lui-m\u00eame."], "008": ["930407s1787 be 000 0 fre d"], "506": ["RESTRICTED ORIGINAL:|bbUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "250": ["Seconde \u00e9dition, plus correcte que la premiere."], "099": ["Robbins MS 186"], "003": ["OCoLC"], "500": ["Includes (p. 66) errata."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080130061745.0"], "LEADER": ["00000cam 2200000La 4500"], "035": ["(OCoLC)81336371"], "300": ["66 p. ;|c19 cm. bound to 30 cm."]}, "RobbinsMS169": {"001": ["06-B3829"], "260": ["Rome,|cca. 1591."], "505 0": ["Fol. 1r-2v: \"Sub pontificatu Bonifacii pape noni\" ; fol. 3r: \"Sub Johanne papa XXIII\" ; fol. 4v-7r: \"Sub Martino Vto\" ; fol. 7v-8r: \"Sub Eugenio IIII\" ; fol. 8v-9r: \"Sub Nicolao Vto\" ; fol. 9v: \"Sub Calixto papa III\" ; fol. 10r: \"Tempore Pii pape II\" ; fol. 10v: \"Sub Paulo papa II\" ; fol. 11rv: \"Sub pontificatu Sixti pape IIII\" ; fol. 12r: \"Sub Innocentio papa VIII\" ; fol. 12v-13v: \"Sub Alexandro papa VI\" ; fol. 14r-16r: \"Sub Julio papa secundo\" ; fol. 16v-19r: \"Sub Leone papa X\" ; fol. 19rv :Sub Adriano papa VI\" ; fol. 20r-24r: \"Sub pontificatu Clementis pape VII\" ; fol. 24v-29v: \"Sub pontificatu Pauli pape III\" ; fol. 30rv : \"Sub pontificatu Julii pape III\" ; fol. 31rv: \"Sub pontificatu Pauli IIII\" ; fol. 32r-33v: \"Sub Pio quarto\" ; fol. 34r: \"Sub pontificatu Pii pape V\" ; fol. 34v: \"Usque ad annum V Gregorii XIII\" ; fol. 35r-39v: ruled but blank."], "520": ["A list of names of cathedrals or monasteries, together with a record of the source of their commendation (e.g. the king of Portugal, the emperor, the queen of England), beginning from the pontificate of Boniface IX up to the 5th year of the pontificate of Gregory XIII (ca. 1389- 1577). Of particular interest are the records of cathedrals and monasteries in the British Isles. Evidence for their changing relations with the Holy See due to the policies of Henry VIII, Mary I, and Elizabeth I, is revealed in the changing sources of the commendations."], "300": ["39 leaves :|bpaper ;|c282 x 215 (221 x 170) mm bound to 283 x 217 mm."], "510 4": ["Phillipps, T. Cat. ms.,|c5367."], "852 8": ["CUL|bRBCAG|hRobbins MS 169|xCIN=JKN"], "008": ["060811s1591 it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 0": ["Compendiolum in cathedralibus"], "583": ["|zCataloged in hand by Kathleen A. Stewart and Jennifer K. Nelson, August 2006."], "245 00": ["Annotationes in cathedralibus etiam metropolitanis ecclesiis ex registro l[itte]rarum ap[osto]licar[um] desumpte :|bV[ideli]c[et] si ad regum aut aliorum principum supplicationem presentationem instantiam vel capitulorum electionem seu al[iis] quovismodo eis provisum sit. Reliquis vero hic non insertis a sede ap[osto]lica simpliciter eis provideri mandatum extitisse."], "546": ["Latin."], "100 1": ["Rambaldo, Nicolo."], "561": ["On front flyleaf (fol. iiiv) is a coat of arms that depicts, on the left side, a pelican biting its own chest and drawing blood to feed her young; and on the right side 5 fleurs-de-lis, two above, two below, separated by a crown. Floating above both of these images is a red cross on a white background in a circle. All of these images are contained within a shield, which is itself surrounded by a burgundy frame. Atop the whole is a red, wide-brimmed cardinal's hat perched on a cross with red tassles hanging down both sides. The motto associated with this coat of arms is \"Ut suos allat seipsum necat.\" The book was once in the library of Alessandro Albani, as evidenced by a strip of paper tipped in between the first flyleaf and pastedown (now in MS file) that reads \"Bibliotheca Albano\" and on the recto of the second flyleaf is a note in pen that reads \"No. B11 B\" and \"Biblioteca Albano.\" Pasted to the verso of the first flyleaf is a printed label that reads \"Ex Bibl. Callisti Marini Pisauren,\" which demonstrates that it was once in the collection of Callisto Marini of Pesaro. The manuscript was also once in the collection of the Earl of Guilford, and of Sir Thomas Phillipps (his no. 5367). Written in modern pencil on front pastedown are the numbers \"196/7\" and \"5367 Ph\" and on the recto of the first flyleaf, in English, \"Seen N[--- -] Important.\""], "500": ["Ms. codex.", "Title from title page (fol. iiir)", "Collation: Paper (watermark depicts an \"F\" atop a trimontium, all enclosed within a shield), fol. iii + 39; 1-5\u2078 (last leaf of last quire is pastedown; quires numbered 1-5, in a contemporary hand, at the beginning of each gathering in the top right hand corner).", "Layout: Written in 14 long lines; vertical ruling in ink to guide listed entries by city.", "Script: Written in a semi-italic and an ornamental gothic script by one hand.", "Decoration: First letter of the first word of the title (fol. iiir) is a 4-line capital with an elaborate floral decoration. The first letter of the first word of the title on the cover is similarly large and ornate. The first words of the subtitles also begin with a similarly decorated capital but not quite as big.", "Binding: Bound in contemporary soft vellum; remains of two cloth ties visible. Title on front cover, written in the same hand as the text with the same decorative elements, reads \"Compendiolum in Cathedralibus.\"", "Origin: On fol. 35v is written a note \"Romae accepi dono Nicolai Raimbaldi, Registratoris supplicationum et capellari regesti bullorum die XX martii MDXCI.\" Nicolo Rambaldo was the Registrar of Supplications and Chaplain of the Register of Bulls during the pontificate of Gregory XIV (5 December 1590 to 15 October 1591).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 169."], "700 1": ["Albani, Alessandro,|d1692-1779.|4asn|4fmo|5CUL.", "Marini, Callisto.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 169"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=91;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS64": {"001": ["ocn603987459"], "260": ["Germany,|c[between 1575 and 1625]"], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Commentary on the Institutes of Justinian. The Proemium (fol. 1r) makes reference the Vita Iustiniani Imperatoris, a compilation by Egidio Perrino, usually published as part of Perrino's Commentaria in institutiones. Marginal notes underlined in red ink, seemingly in the hand that has copied the entire manuscript."], "099": ["Robbins MS 64"], "245 00": ["[Commentary on the Institutes of Justinian]"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was part of the Prince Lichtenstein library (bookplate on front pastedown reads \"Ex Libris Lichtensteinianis\" above coat of arms)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Undiscernable due to tightness of binding.", "Layout: Written in 28 long lines.", "Script: Written in a rushed cursiva currens script by one hand.", "Binding: Paper over pasteboard; leather spine and corners. Leather spine blind-stamped with animals and portraits of saints. Four raised bands. Title on spine reads \"Ivstiniani Institutiones.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 64."], "300": ["436 leaves :|bpaper ;|c320 x 210 (270 x 160) mm bound to 330 x 230 mm."], "505 0": ["Fol. 1r-414r: Commentary on the Institutes of Justinian -- fol. 1r-11r: \"[text] In Prooemium. Ex Justiniani Imperatoris vita, qua ex multis satis studiose Aegydius Perrinus colegisse videtur...Quod ut verus Jurisprudentie scopus est, ita quoque non minus pius est quam honorificum.\" -- fol. 1v-128r: \"[text] Institutionum seu elementorum D. Iustiniani sacratissimi principis Liber I. De Iustitia et Iure\" -- fol. 128v-134v: blank -- fol. 135r -262r: \"[text] Liber II. De rerum divisione et acquerendo (sic) ipsarum dominio\" -- fol. 262v-267v: blank -- fol. 268r-388v: \"[text] Liber III. De hoereditatibus quae ab iuste pacto deferuntur\" -- fol. 389r-395v: blank -- fol. 396r-414r: \"[text] Liber IV. De obligationibus que ex delicto nascuntur\" -- fol. 414v-436v: blank."], "650 0": ["Roman law."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=36;fullview=yes"], "700 0": ["Justinian|bI,|cEmperor of the East,|d483?-565."], "008": ["100407q15751625gw 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, April 2010."], "630 00": ["Institutiones."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100407035105.0"], "035": ["(OCoLC)603987459"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS151": {"001": ["ocn768894430"], "245 10": ["[Letters patent]"], "040": ["BOL|eamremm|cBOL"], "520": ["Letters patent granting the manor of Markynfield and various other properties to Laurence Meres for 21 years. The reversion of the properties goes to Henry Gates, knight (b. before 1523, d. 1589). They had previously been held by the Earl of Northumberland, then convicted of high treason. Henry Gates is also given Bemyshe (Beamish), in the See of Durham, and various properties formerly held by Robert Tempest, also convicted of high treason. He is also given Castle Grenewithe, in Kent, in free socage. Northumberland and Tempest were instigators of the Rising of the North in 1569, while Meres and Gates fought the rebels for the Crown. The three sheets each have three holes and a folded lower margin. They were originally attached to each other there by a twisted cord and later by a red cloth tie (kept in manuscript file)."], "500": ["Ms. document.", "Title supplied by cataloger.", "Layout: Written in long lines; ruled.", "Decoration: First sheet is decorated on top border in pen and ink with a picture of Queen Elizabeth, a lion, a rose, a griffin, a fleur-de-lys, and a harp.", "Origin: This letters patent was issued by Queen Elizabeth in 1571. There are two other dates, each of which seems to support a different date for the document, but the document itself gives \"13 Eliz.\" (i.e., 1571).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 151."], "100 0": ["Elizabeth|bI,|cQueen of England,|d1533-1603."], "260": ["England,|c1571 June 27"], "008": ["111220s1571 enk 000 0 lat d"], "099": ["Robbins MS 151"], "003": ["OCoLC"], "LEADER": ["00000ntm 2200000Ia 4500"], "581": ["\"John Gates\" in Oxford Dictionary of National Bibliography (London: Oxford University Press; consulted online version, 2011); Henry Gates's will (housed at The National Archives, U.K., PROB 11/73, ff. 376-9) mentions the Beamish property; for Cuthbert Sharp see his Memorials of the Rebellion of 1569 (London: J. B. Nichols and Son, 1840; consulted on Google Books, 2011)."], "546": ["Latin."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["There are two sets of marks on verso of first sheet. Bottom left of verso where it is folded to front bears mark in contemporary hand including \"1572.\" Middle of verso has faded paragraph in later hand with heading \"Ao 15 Eliz. R.,\" which would be 1573."], "506": ["RESTRICTED ORIGINAL :|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "583": ["|zCataloged from existing description and in hand by Ana E. Enriquez, November 2011."], "005": ["20111220020345.0"], "505 0": ["\"[Incipit] Elizabeth dei gracia Anglie Francie et Hibernie regina fidei defensor ut Omnibus ad quos presentes literes pervenerunt salutem Cum nos prefata regina per literas nostras patentes sub magno sigillo nostro Anglie confectas gerentes datum vicesimo septimo dei Junii Anno regni nostri terciodecimo [27 June 1571] tradiderimus concesserimus et ad firmam dimiserimus Dilecto nobis Laurentio Meres Armigero...\""], "035": ["(OCoLC)768894430"], "300": ["3 sheets :|bparchment ;|c675 x 765 (530 x 580) mm; 538 x 760 (415 x 570) mm ; 490 x 770 (295 x 575) mm."]}, "RobbinsMS178": {"001": ["06-B4435"], "245 10": ["Consulta a Sua Maest\u00e0 del pres[en]te delegato della r[ea]le giuri[s]d[izio]ne reg[nan]te Duca Domino Gaetano Argento intorno il concilio provinciale Romano celebrato dal Sommo Pontefice Benedetto XIII Signore."], "505 0": ["Fol. 1r-105v: \"[title] Consulta a Sua Maest\u00e0 del presente delegato della reale giurisdizione regnante Duca Domino Gaetano Argento intorno il concilio provinciale Romano celebrato dal Sommo Pontefice Benedetto XIII Signore [text] Per esecuzione degli ordini veneratissimi di Vostra Maest\u00e0 communicati al Collateral Consiglio con viglietto, di cui si rimette copia...c\u00f2 quali ne si prescrivano le leggi che dovr\u00e0 eseguire la nostra cieca ubbidienza, ed umile rassegnazione. Nostro signore iddio. La sua [---] et Maest\u00e0 Vostra guardi ed esalti conforme da suoi fedelissimi vassalli e creati si desidera datus l\u00ec 15 Novembre 1726 [V. V. C. C. M.?]\" ; fol. 106r-193r (=194): \"[text] Appendice delle autorit\u00e0, documenti ed altro attinente alla presente consulta in comprovazione di quel che in essa si asserische (1) Essendo tale stabilimento conforme non solo al detto concilio di Trento...non quidem sero comperit experimento manifestissimo quantum calamitatis rei publicae invexerit. Finis.\""], "520": ["Gaetano Argento (1661-1730) was an exponent of the Neapolitan historico-juridical school which sustained the rights of the crown and civil power against that of the Holy See. This manuscript is one of Argento's \"consulte\" concerning the decisions of a council of the province of Rome which were felt to be prejudicial to the jurisdiction of the king of Naples. An appendix of relevant documents has been added."], "300": ["194 leaves :|bpaper ;|c265 x 190 ( 210 x 115) mm bound to 270 x 200 mm."], "510 4": ["Phillipps, Cat. ms.|c5145."], "852 8": ["CUL|bRBCAG|hRobbins MS 178|xCIN=JKN"], "008": ["060912q17261775it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Italian."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "100 1": ["Argento, Gaetano,|d1661-1730."], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (small label at base of spine displays his catalog number \"5145\"), as well as in the collection of Frederick North, Earl of Guilford (his bookplate on front on front pastedown depicting a shield supported by two dragons rampant with spread wings, gorged and chained, with an earl's crown; within the shield is a lion surrounded by three fleurs-de-lis; the motto reads \"La vertu est la seule noblesse\"). Small green dot above Phillipps number measuring 6 mm in diameter."], "500": ["Ms. codex.", "Title from title page (fol. 1r).", "Collation: Paper (similar to Briquet \"Fleur de Lis,\" 7121 but with an \"F\" above the circle), i + 194 (foliation incorrect after fol. 145 as one folio is skipped) + i; collation indiscernible due to tightness of binding.", "Layout: Written in 18 long lines.", "Script: Written in a cursive script by one hand.", "Binding: Half-vellum and marbled paper over pasteboard. Gilt title on brown background on spine reads \"Consulta del Duca D. G. Argento MS.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 178."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "090 8": ["Robbins MS 178"], "260": ["Italy,|c[between 1726 and 1775]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS283": {"001": ["06-B4028"], "260": ["Lombardy,|c1695."], "505 0": ["Fol. 4r-8r: \"Rubrica del Statuto criminale di Chiavenna e sua giurisdizione\" ; fol. 8v: blank ; fol. 9r-12r: \"Rubrica del Statuto civile e sindicato generale della Valle di Santo Giacomo ed altre cose spettanti alla valle\" ; fol. 12v-16v: blank ; fol. 17r-73r: \"[title] Statuto criminale della giurisdizione di Chiavenna [text] Capitolo I. Dell'officio del Signore Commissario di Chiavenna e del suo giuramento nell'introito del suo officio. Prima \u00e8 statuito che ciascheduno Signore Commissario della giurisdizione di Chiavenna ed il suo luogotenente debba giurare...ed Ecclesi Signori delle Tre Leghe e di quelli alli quali per li prefatti Signori delle Tre Leghe per special commissione sar\u00e0 dato commando e non altrimenti\" ; fol. 73v: blank ; fol. 74r-92r: \"[title] Statuto civile della valle di Santo Giacomo [text] In nomine Domini amen. Anno \u00e0 nativitate eiusdem millesimo quingentesimo trigesimo octavo Indictione duodecimo die Martis decimo septimo mensis Decembris. Questa \u00e8 la reformazione de statuti, capitoli ed ordini della raggione (sic) della Valle di Santo Giacomo...e non sia lecito ad alcuno di proseguire pi\u00f9 oltre detta causa d'appellazione avanti li predetti giudici d'appellazioni [rubr.] Il fine del statuto vecchio della Valle Santo Giacomo\" ; fol. 92v: blank ; fol. 93r-97v: \"[title] Statuto nuovo della Valle di Santo Giacomo [text] Uomini eletti sopra l'aggionta delli nuovi statuti. In nome del Signore l'anno della nativit\u00e0 del medemo millesimo quingentesimo quadragesimo quinto in giorno di Dominica alli dieci nove del mese d'aprile Inditione terza. Questa \u00e8 l'addizione \u00f2 sia la reformazione delli statuti \u00f2 vero decreti della raggione (sic) della Valle Santo Giacomo...Data in Chiavenna in giorno di sabbato alli venti quattro del mese d'aprile dell'anno del parto virginale mille cinqueceneto quaranta cinque Inditione terza. Giorgio Traverso ha sottoscritto\" ; fol. 98r--108v: \"[title] Sindicato generale da osservarsi nella Valle Santo Giacomo [text] Nel nome del Signore amen. L'anno della nativit\u00e0 del medemo millesimo seicentesimo quinquagesimo giorno di Dominica agli venti sette del mese di febbraio Inditione terza. Sedendo il Magnifico Signore Ministrale Antonio Rosirolo di Santo Giacomo come Deputato ed eletto da quattro quartieri della nostra magnifica Valle di Santo Giacomo...Ex post die suprascripta non potendosi per ora attendere alla revisione ricercatta delli conti delli ministrali passati dell'anno 1620 in qua si definisce questo negozio \u00e0 prima luoro commodit\u00e0 e rinchiesta che ne faranno li popoli della Valle. Subscriptum D. Florin de Gregoriis de Spluga notaio\" ; fol. 109r-119v: \"[title] Arbitramento dell'Illustrissimo Signore Governatore Giovanni Gaudentio De Capol (=Campodolino?) arbitro eletto tr\u00e0 li dodeci quarti della Valle di Santo Giacomo [text] In nomine Domini amen Anno ab eiusdem nativitate millesimo sexcentesimo nonagesimo tertio Indictione secunda, die sabbati vigesima prima mensis novembris. L'Illustrissimo Signore Landtricter, Vicario e Governatore Giovanni Gaudentio de Capoli (=Campodolino?) come arbitro loro Dominorum eletto dalli dodeci quartieri della Magnifica Valle Santo Giacomo, come al compromesso sopra di ci\u00f2 seguito agli dieci del mese di settembre 1693 in tante...Di pi\u00f9 io giuro di non crear debiti alla Valle senza commissione espressa delli quartieri della medema, ne fan puoco dare, ne menare in debito alla Valle veruna sorte di spese di mangiare, tanto del passato come del futuro. In fede Io Giovanni Antonio Tomella di Campodolcino publico notaio e cancelliere ho copiato sudetta forma di giuramento\" ; fol. 120r-130v: blank."], "520": ["Contains the penal and civil code in use in the Northern Italian district of Val Chiavenna-San Giacomo for use by judges and barristers. The code sets the prerogatives and limits of the jurisdiction of the prosecuting bodies, as well as classifying crimes and detailing punishments. It ends with the formula of the oath to be taken by judges upon being appointed. Occasional light spotting, light thumbing to lower corners."], "710 2": ["Valchiavenna (Italy)", "San Giacomo Valley (Italy)"], "852 8": ["CUL|bRBCAG|hRobbins MS 283|xCIN=JKN"], "610 20": ["Valchiavenna (Italy)", "San Giacomo Valley (Italy)"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060822s1695 it ||||||||||||00|||ita|d"], "245 00": ["Libro che contiene il Statuto criminale di Chiavenna e sua giurisdizione, il Statuto civile e Sindicato generale della Valle di Santo Giacomo, Forma di giuramento da darsi a giudici, Arbitramento /|cdell'Illustrissimo Signor Governatore Gio[vanni] Gaudentio de Ca[mpodolino?]"], "546": ["Italian."], "300": ["131 leaves :|bpaper ;|c287 x 192 (229 x 145) mm bound to 303 x 202 mm."], "561": ["Some penciled marks on front and back pastedown. Front: \"XXV-3705\"; back: \"c/p BS pp BQ 03/06\" and \"H2028 S [ ] / %.\" Also written on back pastedown is \"Clz. 9/84. Ts.\" and \"Rey & Compe (?)\""], "500": ["Ms. codex.", "Title from title page (fol. 2r).", "Collation: Paper, fol. 130 (contemporary pagination in ink beginning at fol. 17r and ending at fol. 119v) + i; 1-4\u00b9\u2076 5\u00b9\u2078 6-7\u00b9\u2076 8\u00b9\u2076\u207d\u207a\u00b9\u207e.", "Layout: Written in 21 long lines.", "Script: Written in a cursive script by one hand.", "Decoration: Decorative devices to demarcate the beginnings and ends of sections, sometimes also used as page fillers.", "Binding: Contemporary full calf; panelled spine.", "Origin: This manuscript was copied from the original code notarized by one Iohannes Gaudentius (Gaudenzio Manini?), which in turn was copied from the (lost) original code written by one Chancellor Antonio Tomella.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 283."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, August 2006."], "090 8": ["Robbins MS 283"], "581": ["Valchiavenna (Italy). Sommario di alcuni statuti civili, e criminali delle giurisdizioni di Chiavenna, e Piuro (Como : Ostinelli, 1794)."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS147": {"001": ["ocm85182303"], "245 10": ["Institutiones iuris civilis /|cauctore Melchiorre Picarozzi, utriusque iuris professore in venerabili Seminario Tusculano."], "040": ["CUL|eamremm|cCUY"], "520": ["The Institutiones iuris civilis by Professor Melchiorre Picarozzi of the Seminario Tusculano in four books (2 volumes). The bindings of the two volumes are similar but not identical, and the text blocks themselves are quite different in terms of script, watermark, folio size, size of the written space, the text block edges, to name just a few aspects. Volume one of this work is identical to Robbins 146 (Picarozzi's Institutiones iuris canonici in 2 volumes), which leads one to believe that, at some point, an identical volume existed for part two of the Institutiones iuris civilis as well. Robbins does not have this matching item, but has acquired the second volume from a different set in order to make up a whole."], "260": ["Rome,|c[between 1770 and 1825]"], "099": ["Robbins MS 147"], "246 0": ["Iuris elementa clare solideque explicata"], "100 1": ["Picarozzi, Melchiorre."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Bookplate on the front pastedown in Volume 1 reads \"Monsignor Grimaldi Luogotenente dell' A.C.\" (cf. Robbins MS 146)."], "500": ["Ms. codex.", "Title from title pages (fol. 2r, ir); added title from vol. 1, fol. 1r.", "Collation [Volume 1]: Paper (watermark depicts a bird atop a trimontium and the initials \"BM,\" all enclosed within a circle, with the city name \"Ascoli\" below), fol. 210 (contemporary foliation in ink that starts over at the beginning of each book); 1-17\u2078 18\u2076 19\u2078 20\u2076 21-27\u2078.", "Collation [Volume 2]: Paper (no discernible watermarks), fol. i + 264 (contemporary foliation that skips blank pages and starts over at the beginning of each book) + i; 1\u00b9\u2078 2-3\u00b2\u2070 4\u00b2\u2074 5\u00b9\u2076 6-7\u00b2\u2074 8\u00b2\u2078 9-11\u00b2\u2074 12\u00b9\u2078; quires signed 1- 12 in upper left-hand corner; catchwords at the end of each page.", "Layout [Volume 1]: Written in 20 long lines.", "Layout [Volume 2]: Fol 1r-28r and 158r-255r written in 12- 16 long lines; fol. 39r-153r written in up to 23 long lines.", "Script [Volume 1]: Written in a cursive script by one hand.", "Script [Volume 2]: Written in a cursive script by two hands; indexes possibly written by a third hand.", "Binding: Both volumes are bound in vellum over pasteboard. The binding on Volume 1 has a whiter hue and a smoother surface, whereas the binding on Volume 2 has a yellower hue and the surface is rougher to the touch. Both volumes have a gilt title on the spine, but that on Volume 2 has a brown background. The titles read, respectively, \"Institut / juris / civilis / lib. I et II\" and \"Institution / iuris / civilis / lib III e IV.\"", "Origin: According to his own author statement (fol. 1r) Melchiorre Picarozzi was a professor of both laws at the Seminario Tuscolano, which is located in Frascati, just South East of Rome. The Seminario Tuscolano was founded in 1770 by Henry Benedict Stuart, Cardinal Duke of York.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 147."], "300": ["|3Original:|a2 v. (210, 264):|bpaper ;|c190 x 130 (155, 185 x 110) mm both bound to 198 x 138 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-14) and positive (Robbins MS 147)"], "505 8": ["Volume 2: Fol. ir \"[title] Institutiones iuris civilis...Liber tertius\" ; fol. 1r-28r: \"[text] Liber tertius Titulus primus De successionibus ab intestato...quoad sucessionem in ea bona praevalet sententia priori loco expolita\" ; fol. 28v-38v: blank ; fol. 39r-153v: \"[text] Titulus (number erased) De obligationibus. Obligatio si consideretur in tota sui significatione...nam eo ipso creditum suum admittit...quod metus causa\" ; fol. 154rv: Index to Book Three ; fol. 155r -156v: blank ; fol. 157r: \"[title] Institutiones iuris civilis...Liber quartus\" ; fol. 157v: blank ; fol. 158r- 255r: \"[text] Institutionum iuris civilis...Liber quartus Titulus (no number given) De obligationibus quae ex delicto nascuntur...Elapso quadriennio nequit regulariter implorari remedium de quo sermo est\" ; fol. 255v-256r: Index to Book Four ; fol. 257v-264v: blank."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=84;fullview=yes"], "008": ["060823q17701825it 000 0 lat d"], "583": ["|zCataloged in hand by Thalia Anagnostopoulos and Jennifer K. Nelson, August 2006."], "546": ["Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080129054118.0"], "505 0": ["Volume 1: Fol. 2r: \"[title] Institutiones iuris civilis...Liber primus\" ; fol. 2v: blank ; fol. 3r-4v: \"[text] Praefatio. Ii homines in eo felicitatis ac perfectionis statu quo conditi fuerant...ut et vobis honori amicis utilitati Rei publice emolumento esse possitis\" ; fol. 5r-68v: \"[text] Liber primus Titulus primus De iustitia et iure...ut teneatur remotus rigorosam redere rationem, cogendus erit ad damna illata reficienda, quae si dolo asmiserit infamis est\" ; fol. 69r-70r: Index to Book One ; fol. 70v-72v: blank ; fol. 73r: \"[title] Institutionum iuris civilis...Liber secundus\" ; fol. 73v: blank ; fol. 74r-205r: \"[text] Institutionum iuris civilis Liber secundus Titulus primus De rerum divisione et acquirendo earum dominio...et sequentibus aliique qui ex professo de primogenitoris pertractant\" ; fol. 205v: blank ; fol. 206r-207r: Index to Book Two ; fol. 207v-210v: blank."], "035": ["(OCoLC)85182303"], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS294": {"001": ["ocn224077567"], "245 10": ["Notes de l'avocat P. G. Malfait sur louvrage de Mr. D'outrepont ayant pour titre|b: remarques sur le commentaire de Me Louis Le Grand sur la Coutume de Troyes."], "040": ["BOL|eamremm|cBOL"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "260": ["France,|cbetween 1750 and 1799."], "008": ["080415q17501799fr 000 0 fre d"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "505 0": ["Fol. 1-87r: \"[text] Notes de l'avocat P. G. Malfait...Discours Pr\u00e8liminiaire Il me paroit aussi ridicule d'avoir fait des notes...mais il faut avoir \u00e8gard \u00e0 l'article 250 de la coutume de Bruxelles. Fin.\" ; fol. 87v-88v: Table of contents ; fol. 90r-111r: \"[Text] Notulae domini Malfait ad Decisiones domini Wynants. Notulae ad Decisionem 1. ad prolog[um] In congruam post unionem beneficiorum impendi debent...Decis. 222. Vide du Laurii arr. 189 Voet 2.4.45. Finis.\" ; fol. 111v-114v: Ad indicem alphabeticum rerum et verborum.\""], "003": ["OCoLC"], "099": ["Robbins MS 294"], "100 1": ["Malfait, Philippe Guillaume."], "500": ["Ms. codex.", "Title from title page (fol. 1r)", "Collation: Paper, fol. ii + 114 + i ; 1\u2076 (+1) 2-18\u2076 19\u2076 (- 1).", "Layout: Written in 16-19 long lines ; paper has rectangular indentation that serves as a frame for the written space.", "Script: Written in a neat cursive script.", "Binding: Brown leather binding over pasteboard ; marbled paper flyleaf and pastedown.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 66."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, April 2008."], "005": ["20080415042204.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)224077567"], "300": ["114 leaves:|bpaper ;|c225 x 145 (175 x 100) mm bound to 230 x 150 mm."]}, "RobbinsMS261": {"001": ["06-B3730"], "245 10": ["Wijsbegeerte van het Recht."], "520": ["This manuscript provides an opportunity to audit a seminar on the philosophy of law (Rechtsphilosophie), taught by William van der Vlught, an important scholar and international lawyer, at the University of Leiden. As was customary at the time, the first version of this manuscript was a \"verbatim\" transcription of the teacher's lectures. After that, it was neatly copied and lightly edited, resulting in the present manuscript. It is also possible that it was produced by a professional copyist from the notes of one or more students for later sale. In either case it was considered important enough to be put into a permanent binding with a gilt-stamped spine title."], "300": ["97 leaves :|bpaper ;|c225 x 114 (200 x 115) mm bound to 230 x 155."], "852 8": ["CUL|bRBCAG|hRobbins MS 261|xCIN=JKN"], "008": ["060807s1893 ne ||||||||||||00|||dut|d"], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "546": ["Dutch."], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "100 1": ["Vlugt, W. van der|q(Willem),|d1853-1928."], "500": ["Ms. codex.", "Title from the title page.", "Collation: paper, fol. i + 97 + i; written on a modern, lined composition book.", "Layout: Written in 33 long lines; very narrow margins. Rectos of all leaves but three are completely filled, versos have occasional brief comments. There is no original foliation nor catchword system.", "Script: Written in a tidy and professional fine cursive hand.", "Binding: Contemporary quarter pebbled cloth over marbled boards, gilt title on spine.", "Origin: Written in Leiden presumably in the year 1893 (right after the seminar of the academic year 1892-1893).", "On inside front cover, there is a bookplate by a former 19th century owner, that reads: \"Bibliotheek van Mr. J. Wolterbeek Muller\".", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 261."], "700 1": ["Wolterbeek Muller, Johannes,|c1870.|4asn|4fmo|5CUL."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[Leiden],|c1893?."], "090 8": ["Robbins MS 261"]}, "RobbinsMS17": {"001": ["ocn244951508"], "245 10": ["Votum em[inentissim]i d[omi]ni Cardinalis Detii Azzolini in causa beatificationis servi Dei Cardinali Bellarmini."], "040": ["BOL|eamremm|cBOL"], "520": ["Copy of the vote of Cardinal Decio Azzolini concerning the beatification of Roberto Bellarmino (1542-1621). Azzolini was made a cardinal by Pope Innocent X in 1654, and held two appointments as an interim Secretary of State under Innocent X and Clement IX, respectively. The procedure of Roberto Bellarmino's beatification and canonization was initiated in the year following his death. He was beatified in 1923 and canonized in 1930, and in 1931 he was granted the title of Doctor of the Church."], "260": ["Italy,|c[between 1654 and 1699]"], "008": ["080903q16541699it 000 0 ita d"], "099": ["Robbins MS 17."], "505 0": ["Fol. 1r-26r: \"[text] In causa beatificationis et canonizzationis ven[erandi] servi Dei Cardinalis Bellarmini. Super dubium. An constet de virtutibus theologalibus fide, spe et charitate...o il cercare l'informazione pi\u00f9 precisa, o il perdonare questa fama per quanto importi cosie com ella corre nel concetto di molti, ed alla santit\u00e0 vostra bacio con umilissimo ossequio i santissimi piedi."], "100 1": ["Azzolino, Decio,|d1623-1689."], "003": ["OCoLC"], "546": ["Italian."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "600 10": ["Bellarmino, Roberto Francesco Romolo,|cSaint,|d1542-1621"], "500": ["Ms. codex.", "Title from title page (fol. 1r)", "Collation: Paper (bird atop a trimontium), fol. i (modern paper) + 26 + i (modern paper); 1\u00b2\u2076.", "Layout: Written in 22 long lines.", "Script: Written in a neat cursive script by one hand.", "Binding: Green printed paper over pasteboard. Title on spine reads \"Voto del Card. Azzolini nella causa di beatificazione del Card. Bellarmino.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 17."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "005": ["20080903040608.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)244951508"], "300": ["|3Original:|a26 leaves :|bpaper ;|c272 x 202 (246 x 185) mm bound to 275 x 205 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-94) and positive (Robbins MS 17)"]}, "RobbinsMS198": {"001": ["ocn212416389"], "245 10": ["In synodum provincialem Goritiensem dubia ab eminentissimis patribus sacrosancti Tridentini Concilii interpretibus declaranda, ac definienda traduntur ut ad eam confirmandam Apostolice Sedis auctoritas rite tutoque accedat."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Clarifications on the decrees of the Council of Trent from a synod held in October, 1768, in the province of Gorizia located in the Friuli-Venezia Giulia region of Italy. Notes and corrections appear at the end of the document (p. 101-144), followed by two letters dated 1771 and 1772, the latter explaining some of the context of the synod."], "510 4": ["Phillipps, T. Cat. ms.|c23952."], "110 2": ["Catholic Church.|bArchdiocese of Gorizia (Italy)"], "260": ["Gorizia, Italy,|bbetween 1768 and 1772."], "099": ["Robbins MS 198"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of the Colonna family (their red stamp visible depicting a column within a circle). It was also in the collection of Sir Thomas Phillipps (his no. 23952) and in that of Frederick North, 5th Earl of Guilford."], "500": ["Ms. codex.", "Title from title page (p. 1).", "Collation: paper, pp. 152; 1\u00b2 2-5\u00b9\u00b2 6-7\u2076 8\u2078 9\u00b2 10\u2074.", "Script: Main text (pp. 5-99) written in a neat cursive script by one hand. The same hand writes some clarificatory notes on the \"dubia\" on pp. 125-137 and transcribes the two letters on pp. 147-152. In a second hand are clarificatory notes on pp. 102-122 and pp. 139- 144.", "Binding: Bound in a 19th? century hard-cover leather binding with marbled endpapers and pastedown. Title on spine reads \"Synodi Gortiensis Dubia\".", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 198"], "300": ["152 pages :|bpaper ;|c275 x 197 ( 241 x 148) mm bound to 290 x 208 mm."], "700 3": ["Colonna family.|4asn|4fmo|5CUL."], "008": ["080229q17681772it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, February 2008."], "546": ["Latin and Italian."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080229040448.0"], "505 0": ["Pp. 5-99: \"[text] Dubium primum. Ad orationem in aperitione synodi provincialis Goritiensis p. 1. Quod primum observandum occurrit...Hi enim pro peccato poenam peccati, id est mortem intelligunt\" ; pp. 100-101: blank ; pp. 102-122: \"[notes] Qua animadvertit apprima doctus dubiorum auctor...perturbationibus occasionem praebant\" ; pp. 123-124: blank ; pp. 125-137: \"[notes] Il graziosissimo foglio deino del papato col quale Vostra Eminenza mi onora...fit omissis ceteris. An vos ipsi venerabilis fratres earum observantiam\" ; p. 138: blank ; pp. 139-144: \"[notes] Opinio de notis et correctionibus ad concilii Goritiensis decreta spectantibus...In oratione serie habet prior nota, item et posterior\" ; p. 145: blank ; pp. 147-148: \"[letter] Gorizia il 7 ottobre 1771. Dell'Eminenza Vostra la quale si compiaccia...l'espediente per ottenere la stampa\" ; pp. 149-152: \"[letter] 6 Agosto 1772. Circa il Dubbio saviamente proposto cioe' se debba giudicarsi...pronto ad ogni cenno ad intervenire nel luogo da indicarsi.\""], "035": ["(OCoLC)212416389"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS253": {"001": ["06-B3746"], "260": ["[England,|cbetween 1625 and 1663]"], "505 0": ["Fol. 2r-56v: ''[rubr.]1. Quod curiae celebrantur auctoritate...; [text] Curia Cantuariensis [...] celebratur infra...quam summa aliter laxata; fol. 57rv blank; fol. 58r-64r: \"[rubr.] Iurisdictio [...] civitatibus Londinii..; [text] Licet uti (?) tamquam istos perdurantur ministrare...si istos perducti sunt...testimoniales super premissis est; fol. 64v-70v blank; fol. 71r-73r: chapter list."], "245 00": ["Ordo Curiarum spiritualium."], "520": ["The text is divided into 203 paragraphs, and explains the jurisdictional rankings and relations of the ecclesiastical courts of England, trying to unify and order significant precedents in matters likely to arise in future court cases. The entire volume is indexed at the end with a chapter list."], "852 8": ["CUL|bRBCAG|hRobbins MS 253|xCIN=JKN"], "008": ["060808q16251663enk||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "300": ["73 leaves :|bpaper ;|c320 x 220 (305 x 150) mm bound to 325 x 225 mm."], "561": ["On fol. 1r there is a former owner's note which reads: \"Sum liber Rich[ard]us Manning 1663\". On the upper corner of the first flyleaf, written in pencil by a 20th century hand: \"4750 PRBM C4\""], "500": ["Ms. codex.", "Title from fol. 1r.", "Collation:Paper, fol. iii (modern paper) + 73 + iii (modern paper); collation pratically impossible due to the tightness of binding.", "Layout: Written in up to 45 long lines. Catchwords in the right side of the bottom margin. Not ruled. There are occasional marginal notes usually explicating something significant regarding the text, or inserting phrases omitted in the original writing.", "Script: Written possibly by an ecclesiastical notary: the script is quite clean, but the presence of many loops makes it difficuilt to read.", "Binding: Modern full calf antique style. Covers tooled in gilt and blind, using a rule and two fillets to form concentric compartments, one of which is a lighter shade of brown. Round spine with raised bands accented with gilt tooling. Gilt center devices in spine compartments. On the spine, gilt tooled, the title: \"Curiae in Britannia. Manning.\"", "Origin: Written in England, before 1663 and possibly after 1625.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 253."], "700 1": ["Manning, Richard|dca. 1663.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 253"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS82": {"001": ["ocn768850864"], "245 10": ["[Compilation of canon law texts]"], "040": ["BOL|eamremm|cBOL"], "520": ["Compilation of texts on various topics of canon law by Bartholomaeus de Chaimis, Antonius, Archbishop of Florence, Alessandro Ariosto and Angelo Perigli. Topics include confession, excommunication, marriage, and usury. Also included are bulls of Popes Paul II and Pius II."], "260": ["Italy,|c[between 1475 and 1499]"], "099": ["Robbins MS 82"], "700 1": ["Ariosto, Alessandro."], "581": ["For Bartholomaeus de Chaimis, see Bartholomaeus de Chaimis, Interogatorium siue confessionale ([Milan]: Christoforus...Valdafer...impressit, 1474 3 kalendas Octobres [29 Sept. 1474]). For Antoninus, Bishop of Florence, see Kuttner et al., Catalogue of Canon and Roman Law 2:35, 264; Antoninus Florentinus, Summa theologica Tercia Pars (Nurenbergae: Koberger, 1486); and id., Summa theologica Partes I-IV [with additions of Franciscus Moneliensis] (Venice: Nicolaus Jenson, 1477-80). For Angelo Perigli, see Kuttner et al., Catalogue of Canon and Roman Law 1:323, 2:213; Angelus de Periglis, Tractatus de societatibus, in Tractatus universi iuris, duce, et auspice Gregorio XIII, 18 vols.(Venetiis: [F. Zilettus], 1584-1586), 6/1:130b-32b; [Tractatus in materia societatum] ([Siena : Henricus de Harlem, 4 July 1493]); and id., Tractatus perutilis in materia societatum tam de jure civili quam in foro conscientie, in Joannes Franciscus de Pavinis, Enchiridion tractatuum iuris utriusque subscriptos complectens tractatus cum singulorum tabulis ([Paris?]: Jacobi Pouchin sumptibus et expensis Francisci Regnault, anno domini M.CCCCC.xvi.xxii Martii [22 March 1516). For the Tractatus de usuris in article 6 and MS Lucca, BCF 224 containing a copy of the tract in question attributed to Alexander de Ariostis, see Giovanna Murano, Initia operum iuris canonici medii aevi: A shortlist of works, arranged by their incipit words, s. v. \"Exegisti\" (http://www.uni-leipzig.de/j\u0303urarom/manuscr/ murano/murano.htm)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["At one point, possibly in the nineteenth century, manuscript had a German owner (note on fol. 234v reads \"Dieses Buch ist in L[owen?] gekauft\"); this owner may or may not have been Karl J. Tr\u00fcbner of Strassburg (note on old fol. ir)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Collation: Parchment, 1-23\u00b9\u2070 24\u2076; vertical catchwords. According to the modern foliation in pencil, the codex is comprised of 234 folios. Closer inspection by Linda K. Ogden has established that the folio between fol. 143 and fol. 144 was left unnumbered; it is now assigned no. 143a. Two consecutive folios had been numbered 225; the second is now no. 225a. Fol. 233-234 (old foliation) ruled in preparation for the copying of some text; the last tract, however, ends on fol. 232r.", "Layout: Written in 45 long lines; ruled in lead.", "Written in a small gothic script by one hand. Extensive marginal glosses on fol. 169v and 171v in a hand contemporary with the hand of the manuscript; occasional marginal notes and corrections in several (quasi-) contemporary hands.", "Decoration: Gold initials filled with green on blue ground (fol. 1r); pink initial on golden ground with green and blue touches (fol. 53r). Capital letters and paragraph marks in red and blue ink, titles in red ink.", "Binding: Conservation treatment and rebinding (modern brown goatskin) by Linda K. Ogden, August 2001. Full treatment report in manuscript file. Previous binding and flyleaves now kept separately. Manuscript stored in box covered with brown bookcloth; label on box spine reads \"R[obbins] C[ollection] MS 82.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 82."], "300": ["|3Original:|a236 leaves :|bparchment ;|c135 x 100 (95 x 70) mm bound to 145 x 105 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-44) and positive (Robbins MS 82)"], "505 8": ["Fol. 53r-119v: Antoninus de Florentia, Tractatus de censuris ecclesiasticis [Summa theologica, Pars tertia: De excommunicationibus et censuris]: Fol. 53r-118r: Tractatus de censuris ecclesiasticis. \"Excommunicatio dicitur exclusio a communione sicut autem triplex est communio fidelium...De penis que inferuntur a iudicibus habes etiam infra in tertia parte ti. De iudicijs Amen et gloria christo\" -- fol. 118r-119v: Tabula super Tractatus de censuris ecclesiasticis. \"Excommunicatio...Explicit tabula super .T. de censuris ecclesiasticis. Reverendi patris et domini domini fratris Antonini archiepiscopi florentini de ordine praedicatorum. Amen.\"", "Fol. 120r-121v: Paulus II, Bullae (Cum omnibus iudiciis, Rome, May 1465; Cum detestabile, Rome, December 1464; Etsi doci gregis, Rome, March 1469); Pius II, Bulla (Auctem apostolica, Rome, December 1461).", "Fol. 121v-153r: Antoninus de Florentia, De matrimonio [Summa theologica, Pars tertia: De sponsalibus et matrimonio]: \"Beatus es, et bene tibi erit: uxor tua sicut uitis abundans in lateribus domus tue filij tui sicut nouelle oliuarum. psal. 127...et eam mittit ad consanguineos ipsius uxoris pro maiori honestate\" -- fol. 153rv: Summula quadam de omnibus uitijs tam uirorum quam mulierum coniugatorum que sunt mortalia.", "Fol. 154r: Tabula super Tractatus de sponsalibus et matrimonio.", "Fol. 154v-204v: [Alexander de Ariostis?] Tractatus de usuris: Fol. 154v: \"Exegisti a me iure tuo venerabilis pater ut de usuarie pravitatis casibus nonnulla tibi scriptis digererem...Demum cuiusmodi debeat esse ista[?] satisfactio: ut ex ea salutem miseri consequantur iam uero de his dice[re?] incipiamus\" -- fol. 154v-203r: Tractatus de usuris. \"Usura quod est Exemplo secundum host[iensis] in su[mma] ti. de usuris [section] .i. Usura est quodcumque solutioni rei mutuate accidit...De contractu locationis et conductionis et de contractu pignoris patet in summa pisa. in verbi suis et in emphiteosis in additionibus Finis.\"", "Fol. 203r-204v: Tabula super Tractatus de usuris.", "Fol. 204v-209r: Angelus de Periglis de Perusio, Tractatus de societatibus: \"Quoniam laicorum frequens est usus in contrahendis societatibus negociandi ut unus sociorum pecuniam alter operam ponat...tam de iure civili quam canonico quam etiam in foro consciencie dicenda occurunt michi Angelo parigli de perusio iudicio tamen saniori semper salvo Amen.\"", "Fol. 209v-232r: Tractatus de restitutione: Queritur cui restitutione teneatur inventor rei alie Respondit S. B. in suo X [libro?] de religione christiana sermone 33 ar. i. ch. i...nisi probabiliter et rationabiliter presumatur qui melius talia per ipsum heredem poterunt expleri hec S. B. finis.\""], "100 0": ["Bartholomaeus,|cde Chaimis."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=51;fullview=yes"], "700 0": ["Antoninus,|cSaint, Archbishop of Florence,|d1389-1459.", "Paul|bII,|cPope,|d1417-1471.", "Pius|bII,|cPope,|d1405-1464."], "008": ["111220q14751499it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts, December 2011."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20111220110734.0"], "505 0": ["Fol. 1r-53r: Bartholomaeus de Chaimis, Interrogatorium sive confessionale: Fol. 1r: Proemium. \"Incipit confessionale...Cum ars artium sit regimen animarum ex. de eta et. qua. Cum sit Et inter humana exercitia tanto sit periculosius si eo quis male fungatur quanto anime preciosiores sunt...2um de panitentis [sic] solerti ad confessionem admissione 4um est de penem iniunctione et peccatorum absolutione\" -- fol. 1r-5v: Prima pars. \"Circa primam notandum quod non sacerdos etsi possit audire peccata confitentis in articulo mortis...exponendo eis periculum consulendo semper quod totius est supra ab huiusmodi se abstineant\" -- fol. 5v-8r: Secunda pars. \"Circa secundum notandum quod confessor peccatorem uenientem ad confessionem benigne dulciter et caritatiue recipere debet...propter quod et ipsi multam temporis amittunt et alijs sepius occasionem scandali tribuunt\" -- fol. 8r-49r: Tertia pars. \"Circa tertium principale sciendum Quod non sufficit confessorem solum audire ea que sibi a peccatore dicuntur...excommunicationem incurrit extra sen. ex. cum ex eo. in clementinis\" -- fol. 49r-53r: Quarta pars. \"Expeditis tribus huius opusculi principalibus partibus restat videndum ultimam que in duobus consistit...plenariam indulgentiam tibi concessam a domino papa pro ultimo articulo mortis tue In nomine patris et filij et spiritus sancti Amen Deo gratias amen.\""], "035": ["(OCoLC)768850864"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS148": {"001": ["ocm85182313"], "245 10": ["[Decisiones Romanae Rotae] ;|bRegulae cancellariae ; De carceribus ; De nobilitate."], "040": ["CUL|eamremm|cCUY"], "520": ["Compilation of various legal treatises: William of Horborch's Decisiones antiquae Romanae Rotae and Decisiones novae Romanae Rotae, Pietro d'Ancarano's De carceribus, and Bartolo di Sassoferrato's De nobilitate. Also bound with these works are the Regulae cancellariae approved by John XXII through Eugene IV, a calendar of feast days, and a fragment of a Constitutio of Martin V (Quod antidota morbis). The codex is misbound so that the Decisiones novae Romanae Rotae and the Regulae Cancellarie are each divided up, ending abruptly in the middle but then picking up later on in the codex (see contents and collation notes for detailed description)."], "260": ["[Spain?,|cbetween 1380 and 1440]"], "099": ["Robbins MS 148"], "100 1": ["Horborch, Guillelmus,|dfl. 1373-1381."], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Written in a modern hand in ink in the middle of the tail edge of the first and last folios (fol. 1r and 262v) are the initials \"C. D.\" Also written in a modern hand in ink at the top of fol. 1r is the number \"66.\" On the recto of the flyleaf at the end, in modern pencil, is written \"Tratado del derecho y de la nobleza per Bartolome de Saxo Ferrato (sic) 1447 - 262 folios en vitela\" (presumably a bookdealer's description)."], "500": ["Ms. codex.", "Title of William of Horborch's work supplied by cataloger; other titles from incipits and explicits of individual works (fol. 146r, 244r, 245r, 248v, and 262v).", "Collation: Parchment, fol. 262 + i (parchment); 1-19\u00b9\u00b2 20\u2074 21-22\u00b9\u00b2 23\u2074 24\u00b2. Catchwords at the end of each quire. Quires signed with lower case and upper case letters in red; folios signed with Arabic numerals in brown ink on the first half of the quire. Signature marks regular until the end of the 11th quire (the letters are not completely sequential, appearing a-h, k-l, k, but the catchwords match). After quire 11 the scribe changes, the catchword does not match, and the signature marks become capital letters A, G-I until quire 16 (again, the catchwords match in this span although the letters are not sequential). From quire 17-20 the signature marks are back to lower- case letters m, o, q-r; quires 21-23 are signed K? L, M and quire 24 is unsigned. The first word of quire 21 (fol. 233r) picks up the catchword at the end of quire 16 (fol. 192v): \"beneficii.\" In many instances catchwords are not picked up, and in some cases they are entirely lacking. Presumably this manuscripts was originally signed more or less regularly with capital letters following lower-case letters, as was standard practice. However at some point the manuscript was disbound, some quires were likely lost, and then was rebound incorrectly with the quires signed in upper-case letters being interspersed among the quires signed in lower-case letters. This is confirmed by the fact that the second title in this codex, Horborch's Decisiones novae Romanae Rotae, is interrupted in the middle at fol. 145v and then picks up again on fol. 193r.", "Layout: Written in 32 long lines, above top line. Ruled in lead. Prickings visible on fore edge and on head and tail edge to guide vertical bounding lines.", "Script: Written in a gothic cursiva libraria script by three hands: Scribe 1, fol. 1r-132v and 193r-232v; Scribe 2, 133r-192v and 233r-262r; Scribe 3, fol. 262v. \"Many litterae elongatae\" above the first line of text.", "Decoration: 4-line red and blue initial (fol. 1r, 245r, 248v) with extended flourishings of up to 13 lines, with infilling of blue and other decoration in red; 2-line paragraph marks throughout in alternating red and blue; red rubrics.", "Binding: Early 19th cent. dark brown leather over pasteboard. Gilt decoration around border on front and back. 7 panels on spine with gilt floral decoration in 6 of them and gilt title in one (2nd panel from the top) that reads \"Bartolomeum / De Saxsofera / Tractatus de / Nobilitatib.\" Marbled flyleaves and pastedowns.", "Shelfmark: Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 148."], "300": ["|3Original:|a262 leaves :|bparchment ;|c300 x 200 (190 x 134) mm bound to 305 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-15) and positive (Robbins MS 148)"], "505 8": ["2. Fol. 73v-145v, 193r-232v: [Decisiones novae Romanae Rotae] \"[incipit] In nomine Domini Amen Anno a nativitate Domini millesimo trecentesimo septuagesimo sexto die mercurii tricesima mensis ianuarii pontificatus Domini Gregorii Pape Undecimi anno sexto...ego Guilhermus de Horboch alemanus Decretorum doctor minimus ac inter dominos auditores minor, conclusiones seu determinationes infrascriptas incepi colligere et conscribere...continuando usque ad annum Domini MCCCLXXXII et mensem maii...[text] De appellationibus ad diffinitiva. Prima est quod attemptata appellatione pendente a diffinitiva post ipsius desertionem non veniunt...Breviter omnes Domini dixerunt opinionem glosse ordinarie prestantiorem...\"", "3. Fol. 146r-192v, 233r-243v: [Regulae cancellariae] \"[rubr.] Regule cancellarie date in cancelleria per dominum Iohannem papam XXII, Benedictum XII, Clementem VI, Innocencium VI, Urbanum V, Gregorium XI, Urbanum VI, Bonifacium VIII, Innocencium VII, Martinum quintum et Eugenium quartum [text] Infrascripte regule restructorie sunt tradite de mandato sanctissimi in Christo patris domini domini Iohannis divina providentia Pape XXII...decernens irritum et inane quicquid in contrarium a quacumque quavis auctoritate scienter vel ignoranter contigerit attemptari. Publicata fuit in cancelleria et registrata xxiii die mensis novembris Anno primo. B. Graden.\"", "4. Fol. 244rv: [Calendar of feast days] \"[rubr.] Festa in Romana Curia festivanda in palatio causarum apostolico per reverendos in Christo patres et dominos auditores sacri palatii apostolici et audientie contradictarum [text] De mense ianuarii...Item cum Papa equitat. Deo gratias.\"", "5. Fol. 245r-248r: [De carceribus] \"[rubr.] Incipit tractatus domini Petri de Ancharano De carceribus [text] Quia legum precepta principaliter sunt inventa ne pauperes persone afficiantur...An debeant relaxari si preste cautionem de satisfaciendo, Glossa quod sic in c. Dilectis de appellationibus, in verbo diversis modis [rubr.] Explicit tractatus de carceribus. Deo gracias.\"", "6. Fol. 248v-262r: [De nobilitate] \"[rubr.] Incipit tractatus de nobilitate [text] Si ut propinis Quero in quo differat iste tractatus a tractatu primi libri in quo de dignitatibus tractatur...Licet sculpere signum Salvatoris, ut C. ne[mini?] licere signum salvatoris Ihesu Christi in silice vel marmore sculpere, in rubro et in nigro. Bar[tolus?] [rubr.] Explicit in tractatus de nobilitatibus seu dignitatibus insigniis et armis compositus per famosissimum Legum doctorem Bartholum de Saxoferrato. Deo gracias.\"", "7. Fol. 262v: [Fragment of the constitution Quod antidota morbis of Martin V] \"[rubr.] Constitutio domini Martini Pape Quinti contra ordinarios et officiales eorum non permittentes exsequi litteras apostolicas sive litteras de preatis vel visa est [text] Martinus episcopus, servus servorum Dei. Ad futuram rei memoriam. Quod antidota morbis, hec prestare solent statuta negotiis...quicumque deputati et alii quicumque ad quos spectabit...\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=85;fullview=yes"], "700 0": ["Pietro,|cd'Ancarano,|d1330-1416.", "Bartolo,|cof Sassoferrato,|d1313-1357."], "008": ["060825q13801440sp 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, August 2006."], "546": ["Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080129054118.0"], "505 0": ["1. Fol. 1r-73v: [Decisiones antiquae Romanae Rotae] \"[text] Auditor cause appellationis et negotii principalis in partibus interposite statim potest inhibere iudici a quo...quid si hominem vel servum petere volo.\""], "035": ["(OCoLC)85182313"], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS26": {"001": ["ocn762187817"], "245 10": ["Miscellanea."], "040": ["BOL|eamremm|cBOL|dBOL"], "003": ["OCoLC"], "LEADER": ["00000ntm 2200000Ia 4500"], "110 2": ["Church of England.|bDiocese of Canterbury."], "260": ["England,|c[between 1610 and 1634]"], "008": ["111123q16101634enk 000 0 eng d"], "099": ["Robbins MS 26."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Lists and long lines.", "Binding: Modern tan cloth over pasteboard. Leather on spine.", "Origin: The dated documents copied in this collection come from a period comprised between 1610 (article 4, fol. 7v) and 1634 (article 22, fol. 91r). The original documents in article 7 were drafted during the reign of James I, thus James (d. 1636), first Earl of Carlisle, first Viscount Doncaster, first Baron Hay, was a gentleman of the bedchamber under James I and Master of the Wardrobe between 1613 and 1618 (see article 7b). Lionel Cranfield (1575-1645), Earl of Middlesex, was knighted in 1613 and made lieutenant of Dover Castle and surveyor general of the customs; he was appointed Master of the Great Wardrobe (see article 7a) on 14 September 1618, and became treasurer in 1623. The Bishop of London mentioned in 7a is George Montaigne (Mountain) (accessed 1621). William Noy (1577-1634), the co-signer of article 1 and the author of article 22, was appointed Attorney General to Charles I on 27 October 1631 and Treasurer in 1632. His award (article 22 here) adjusts a difference regarding metropolitical visitation between William Laud, Archbishop of Canterbury (accessed 1633) and John Williams, Bishop of Lincoln (accessed 1621). Prior to his accession to the see of Canterbury, Laud had been the Bihsop of the diocese of St. David (accessed 1621; see article 18). St. David's (known as Menevensis) was the claimed successor of the primitive metropolitan see of Wales.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 26."], "581": ["D. Wilkins, Concilia Magnae Britanniae et Hiberniae 4 (London: R. Gosling, F. Gyles, T. Woodward, and C. Davis, 1737), 488 (for the printed version of article 22); Irene Josephine Churchill, Canterbury Administration, 2 vols. (London: Society for Promoting Christian Knowledge, 1933), 1: 592 (the final portion of article 22)."], "546": ["English (with some headings in Latin)."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once with the holdings of Sir Thomas Phillips (manuscript number not present; presumably lost in rebinding)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "583": ["|zCataloged from existing description by Lumita Florea and in hand by Alexandre M. Roberts, November 2011."], "005": ["20111123013854.0"], "505 0": ["Fol.1r-v: William Noy, Attorney General, and John Brisco, Resolution in the matter of parsonage benefices -- fol. 2r -3v: Verdict in the case of a lease made by Mr Roane, parson of the church of Dalingho, Suffolk, of the parsonage house and lands in Dalingho -- fol. 5r-6v: Bishopric of London, Rents due at various feasts -- fol. 7r-v: Bishopric of London, Estimate of profits -- fol. 8r- 10v: Bishopric of London, Values of benefices in London, Middlesex, Essex, Hertfordshire, Ruthlandshire, Northamptonshire, Oxfordshire, Huntingtonshire, Gloucestershire, Surrey, Worcestershire, and Nottinghamshire -- fol. 11r-12r: List of benefices in the King's patronage -- fol. 13r-20r: \"Seuerall Directions and instructions touching the Mawndy, the seuerall offices, allowances & Fees to the Bishop Almoner & his Deputie, with all the Fees due at the Homage, making & Consecration of a Bishop to euery officer & Minister theire\": (fol. 13r -v) The Mawndy Bill, signed Jacobus Rex: \"Wee will, and comand you, forthwith upon the sight heereof that of our money and treasure of our Chamber being in your Custodie you deliver or cause to be delivered unto...George, Bishop of London...and these our letters shall be your sufficient warrant and discharge in this behalfe Given under our signett at our Pallace at...20th day of March in the 17th yeare of our Raigne of England France and Ireland and of Scotland the three and fifteth To our honestie, and welbeloved Sir [W H?] knight our Treasorer of our Chamber\" ; (fol. 13v) A Warrant to the great Wardrobe for Delivering necessaries for his Majesties Mawndy. Signed by the King: :Wee will and comand you, that imediately upon the sight hereof, you deliver or cause to be delivered to...the Lord Hay, viscount Doncaster...And these our letters signed with our own hand shall be your sufficient warrant...Given under our signett at our Pallace at Westminster the first day of February Anno Domini 1618 And in the 16th yeare of our raigne of our realmes of England...& of Scotland 52th To our honestie and welbeloved Lyonell Cranfeild knight Maister of our great Wardrobe: ; (fol. 14r-15r) Maundy fees ; (fol. 15v-17r) Instructions for a Deputie Almoner ; (fol. 17r-v) The office of a Coroner [W. Johnson attornat pro Regis] ; (fol. 18r) Fees of a Bishop at his doeing of Homage in the Court ; (fol. 18v-20r) The Particular Fees & Charges at the making of a Bishop (royal assent, restitution, consecration and confirmation, homage) -- fol. 21 r-v: The Valuation of the Severall Deaneries in England with the Tenthes that every one of them payeth -- fol. 22r-24r: The Valuation of the Severall Liveings of all the Bishopps in England, with the tenths that every of them payeth -- fol. 24r-v: A Note of the Bishops & how they are to take place each before, or after other -- fol. 24v-25r: An Estimate of all the Benifices Presentative, within this realme, with theire valuations in the kings books -- fol. 25r: Memorandum that...the Benifices of ten pounds and upwards in the kings books may be lymited to students of the universities of Oxford & Cambridge -- fol. 25v-26r: An Estimate out of the office of the First Fruites Spirituall Promotions & Liveings -- fol. 26r-27r: The Proportion of all the Benifices in England -- fol. 27v-28r: The Proportion of the Churches of the late Foundation what they yearely give -- fol. 28r-v: The Number of Churches within every Shire as they are in the Booke of First Fruites -- fol. 29r-66r: The yearely value of all & singuler Dignities Spirituall Promotions & other Ecclesiasticall Benefices of the yearely value of xx \u00a3 & upwards bring within the Realme of England & Wales [& Calais] viz. the Provinces of Canterbury & Yorke -- fol. 67r-73r: Extractus Primitiarum [?] omnium Beneficiorum ac promotionum Ecclesiasticorum quorum cunque infra Dioc: Meneven Ex Recordis Dominis Regis exhausti -- fol. 77r: Funerall Charges -- fol. 78r-79v: The Orders for duties for Church Parson & Clerke of the parish of St. Marie Newington in the County of Surrey as hath bene allowed to be sett downe taken as they were formerly in Tables -- fol. 80r-84v: Tabula Feodorum Reverendo in Christo Patris Domini Richardi Londonensis Episcopo -- fol. 85r-91r: Extractus e Registro principali [?] Sedis Archiepiscopalis Cantuarii: \"Whereas the most Reverend father in God William by the divine providente Archbishop of Canterbury primate of all England...and the Right Reverend father in God John Lord Bishopp of Lincolne...required me William Noye to bestowe my paines...I thinke it convenient and doe advise that if the Lord Bishop of Lincolne be inhibited during the Visitation Metropoliticall hee forbeare to exercise Jurisdiction Ecclesiasticall within his Church or dioces...In witness of allwith I have made two parts of all these presents...dated the 25th day of March...in the yeare of our Lord God 1634 William Noye\" -- fol. 93r-94v: An Order & Direction sett Downe by Doctors of the Civill Lawes to the Number of 15[?] Assembled together in the Comon Dyning[?] Hall of Doctor Comons London Touching a Course to be taken & observed by the Assessors of theire Taxations of the Church & walls of the Church yards in & about London & Middlesex to be applied generally upon occasions of Reparations to all Places in England whatsoever."], "035": ["(OCoLC)762187817"], "300": ["|3Original:|a95 leaves :|bpaper ;|c190 x 155 mm bound to 195 x 165 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-99) and positive (Robbins MS 26)"]}, "RobbinsMS118": {"001": ["ocn535271261"], "260": ["Germany?,|c18th century"], "040": ["BOL|eamremm|cBOL|dBOL"], "852": ["BOL|bRBCAG|xCIN=JKN"], "650 0": ["Canon law"], "246 18": ["Miscellanea Juridica 1700"], "008": ["100301q17001799gw 000 0 lat d"], "099": ["Robbins MS 118"], "500": ["Ms. codex.", "Title from fol. iiir. Title on spine reads \"Miscellanea Juridica 1700.\"", "Collation: Paper, fol. iii + 133; fol. 1-95 foliated in ink, in the same hand as manuscript; fol. 96-133 foliated in pencil in a modern hand.", "Layout: Written in 18 long lines.", "Script: Written in a cursive script by one hand.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 118."], "LEADER": ["00000ntm 2200000Ia 4500"], "245 00": ["Collectaneum Juris Canonici Congestum."], "583": ["|zCataloged from existing description and in hand by Alexandre M. Roberts, February 2010."], "003": ["OCoLC"], "561": ["An old shelfmark penciled in red on front and back pastedowns reads \"K12.\" At the beginning of the 18th century the book was the property of one Johannes Henricus Reichart (owner's mark and a date, 1709, at the bottom of fol. iii recto); it might have been no. 2349 in his library (number on fol. iii recto)."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "005": ["20100301035839.0"], "505 0": ["Fol. 1r-125r: \"Abbatissa potest conferre ecclesias et preficia et instituere clericos...Ille non iustus este, qui intellegit iusta, sed qui ex voluntate iuste agit...\" ; fol. 125v-133v: blank."], "035": ["(OCoLC)535271261"], "546": ["Latin"], "300": ["|3Original:|a133 leaves :|bpaper ;|c100 x 150 (70 x 130) mm bound to 105 x 155 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 03-92) and positive (Robbins MS 118)"]}, "RobbinsMS128": {"001": ["ocn180191375"], "245 10": ["[Margarita decreti]"], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Manuscript contains the Margarita Decreti of Martinus Polonus (fol. 1r-117r). The last pages of the manuscript (fol. 117rv) contains the text (or part of the text) of Iohannes de Deo's Breviarium super toto corpore Decretorum."], "246 1": ["Tabula martiana", "Tabula martini"], "260": ["Italy|c[between 1400 and 1425]"], "099": ["Robbins MS 128"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper; fol. i + 120; 1-12\u00b9\u2070 catchwords at the end of each quire.", "Layout: Written in 2 colums of 45 lines; vertical bounding lines ruled in lead, horizontal lines ruled in ink.", "Script: Written in an early humanistic script by one hand.", "Decoration: Initials touched throughout in red, yellow and green.", "Binding: Bound in parchment over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 128."], "600 00": ["Gratian,|dactive 12th century.|tDecretum|vIndexes."], "300": ["|3Original:|a120 leaves :|bpaper ;|c295 x 215 ( 195 x 144) mm bound to 297 x 219 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-06) and positive (Robbins MS 128)"], "505 8": ["Fol. 1r-117r: \"Inter alia quecumque ad fidelium Christi doctrinam scripta sunt...Finito libro sit laus et gloria Christo\" ; fol. 117rv: \"Humanum genus. Magister Gratianus intendends providere utilitati universalis ecclesie compilavit hoc opus...Laudem in duobus ultimis capitulis concludit opus suum de spirito sancto. Amen\" ; fol. 118rv: \"Beneficium ecclesiasticum non potest licite sine institutione canonica obtineri...Ceterum si layci --- per suos ordinarios ab hoc excessu omni cessante privilegio per censuram ecclesiasticam conpescantur\" ; fol. 119r-120v : ruled but blank."], "650 0": ["Canon law|vIndexes."], "100 0": ["Martinus,|cPolonus,|dd. 1279."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=76;fullview=yes"], "700 0": ["Jo\u00e3o de Deus,|dapproximately 1190-1267."], "008": ["071101q14001425it 000 0 lat d"], "583": ["|zCataloged by Kathleen A. Stewart and in hand by Jennifer K. Nelson, December 2007."], "546": ["Latin."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080123050458.0"], "035": ["(OCoLC)180191375"], "LEADER": ["00000ctm 2200000Ia 4500"]}, "RobbinsMS89": {"001": ["ocn660254076"], "260": ["Italy,|c1500s."], "040": ["BOL|eamremm|cBOL"], "520": ["Manuscript contains transcriptions of privileges, papal bulls, and statutes relating to the history of the Patriarchal Basilica of Aquileia. The first item transcribed in the main text is an example of a privilege of Poppone, the Patriarch of the basilica, written on his orders and signed by a notary and scribe named Bertaldo. Additional commentaries regarding more recently adopted statutes are written on the initial folios in Latin and Italian, include the following years (here rearranged in proper chronological sequence): 1500, 1502, 1540, 1543, 1548, 1555, 1557, 1607, and 1609. Marginal corrections; marginal notes in several later hands, some giving dates for the promulgation of specific statutes, others indicating that certain statutes have become obsolete."], "099": ["Robbins MS 89"], "003": ["OCoLC"], "245 00": ["Statuta venerandi capituli aquileiensis ecclesiae."], "246 08": ["Statuta Popponi patriarce"], "561": ["Ownership note on front pastedown: \"Di Gio[vanni] Fran[ces]co di Prampiro, Can[oni]co d'Aq[uilei]a\" (it is possible that Giovanni Francesco is the writer of the notes on fol. ir, vir-viir, and 80v, in addition to the table of contents found on fol. iv-iiv). Old inventory number in pencil on back pastedown: \"612126 KAMP 12.\""], "500": ["Ms. codex.", "Title from incipit of main text (fol. 10r).", "Collation: Paper, fol. 88 (foliation, in a later hand, starts on the sixth folio of the manuscript, on the second folio of the main text; modern foliation in pencil in the lower right-hand corner records continuous foliation from the very first to last folio); 1\u2076 2-11\u2078 12\u00b2; catchwords at the end of most quires.", "Layout: Main text written in 22 long lines.", "Script: Main text (fol. i (i.e. 5)r - 80 (i.e. 86)r) written in a humanistic miniscule script by one hand. Table of contents and notes on the first five and last two folios written in cursive in various later hands.", "Decoration: Initials and chapter headings in red ink.", "Binding: Blind-stamped brown leather; holes for fore-edge clasps (now lacking). Gilt edges. Title on front cover, in black ink, reads \"Statuta reverendi capituli aquillensis\" (sic); title on spine, on brittle paper label affixed at a later date, reads \"Statuta [P]opponi [pa]triarce.\" On front pastedown is inscribed \"Di Gio[vanni] Fran[ces]co di Prampiro canonico d'Aq[uilei]a\"; on back pastedown are aathematical additions in ink.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 89."], "600 00": ["Poppone,|cPatriarch of Aquileia,|d-1042."], "300": ["|3Original:|a88 leaves :|bpaper ;|c210 x 155 (130 x 95) mm, bound to 215 x 155 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-72) and positive (Robbins MS 89)"], "610 20": ["Basilica di Aquileia (Aquileia, Italy)"], "505 8": ["Fol. 1v-2v: List, in a later hand, of topics and chapter numbers referring to the statutes in the main text.", "Fol. 3r: Italian note, in a later hand, of a statute from 1602.", "Fol. 3v-4r: blank.", "Fol. 4v-5r: List of statutes in a later hand.", "Fol. 5v-8v: \"[text] In Christi nomine amen. Hoc est exemplum privilegii reverendissimi in Christo patris et domini domini Popponis sanctae Aquileiensis (originally spelled Acquilegiensis but the \"c\" and the \"g\" are struck through) ecclesie Patriarce cuius tenor talis est...sig[nu]m man[us] B[er]taldi not[ari]i q[u]i ha[n]c cartula[m] ex iussa d[omi]ni Popponis r[everendissi]mi Pat[riarc]he conscripsi atque complevi.\"", "Fol. 9r-14r: \"Tabula statutor[um] venerandi capituli aquileien[sis] ecclesie fideliter incipit caput\"", "Fol. 14v: blank.", "Fol. 15r-85r: \"[text] Ad honorem omnipotentis Dei...Incipiunt statuta venerandi capituli Aquileiensis ecclesie...Datum Senis anno incarnationis Domini mill[esim]o quadringentesimo sexagesimo quarto nonis Augusti pontificatus n[ost]ri anno secundo.\"", "Fol. 85v-87r: List, in a later hand, of deliberations and statutes.", "Fol. 87v-88r: blank.", "Fol. 88v: Italian notes in a later hand."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts and Jennifer K. Nelson, September 2010."], "246 04": ["Statuta reverendi capituli aquillensis"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=56;fullview=yes"], "008": ["100902q15001599it 000 0 lat d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Mostly Latin, some Italian."], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100902034031.0"], "505 0": ["Fol. 1r: List of statutes in a later hand."], "035": ["(OCoLC)660254076"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS164": {"001": ["06-B4351"], "245 10": ["De electione Pontificum."], "505 0": ["Fol. 1-r-431r: \"[text] Duplici potissimum disputatione primus hic liber constabit, altera erit de vario genere electoris, altera de iure eligendi in illa agetur de laicis, principibus, maxime Romae imperatoribus et Italiae regibus...utrumque aut hoc periculum sive certum certitudine naturali sive morali dico in hac forma per se spectata non contineri."], "520": ["A treatise on the legal theory behind papal elections written by the vicar general of the Dominican Order, Pietro Maria Passerini. The work discusses the status of various types of electors who have traditionally taken a role in choosing the pope, and the law of election by which lay princes, the Roman Emperor, and the Italian kings justify their roles in the choice. Comments in the margin in a contemporary hand."], "300": ["431 leaves :|bpaper ;|c318 x 226 ( 252 x 135 ) mm bound to 331 x 231 mm."], "510 4": ["Phillipps, T. Cat. ms.|c5951."], "700 3": ["Colonna family.|4asn|4fmo|5CUL."], "852 8": ["CUL|bRBCAG|hRobbins MS 164|xCIN=JKN"], "008": ["060906q16751699it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "100 1": ["Passerini, Pietro Maria,|d1596-1677."], "561": ["At the bottom of the front flyleaf in a 17th cent. hand in ink is written \"Ex libris Domini Antonii Campii.\" The front and back flyleaves bear the red stamp of the Colonna family (a column within a circle). In pencil in a contemporary hand on the front flyleaf are some bookdealer's notes \"Seen [---],\" \"491/6\" and \"5951 Ph.\" This last note, as well as the small catalog number attached to the base of the spine, indicate that this book was once in the possession of Sir Thomas Phillipps (his no. 5951). The manuscript was apparently also in the collection of Frederick North, Earl of Guilford, but his bookplate is not present."], "500": ["Ms. codex.", "Title from spine.", "Collation: Collation: Paper (similar but not identical to Briquet \"Oiseau,\" 12250) ii + 430 + fol. i ; 1-5\u00b9\u2070 6\u00b9\u2074 7\u2076 8\u00b9\u2074 9\u2076 10\u00b9\u2074 1\u00b9\u2076 12\u00b9\u2074 13\u00b2 14\u00b2 15\u00b9\u2070 16\u2078 17-25\u00b9\u2070 26\u00b9\u2074 27- 43\u00b9\u2070. Contemporary foliation in ink in upper right-hand corner is incorrect: 1 folio is skipped after fol. 63; after fol. 79 foliation starts again at fol. 76; and fol. 294 is counted twice.", "Layout: Written in 25 long lines; vertical bounding lines ruled in dry point.", "Script: Written in a neat cursive script by one hand.", "Binding: 18th century vellum over pasteboard. Title in ink on spine reads \"De electione Pontificum.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 164."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL.", "North, Frederick,|cEarl of Guilford,|d1766-1827.|4asn|4fmo |5CUL."], "090 8": ["Robbins MS 164"], "260": ["Rome,|c[between 1675 and 1699]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS238": {"001": ["06-B3664"], "260": ["[Italy,|cbetween 1775 and 1799]"], "505 0": ["Pp. 1-49 \"[rubric] Nota dei mobili, ed altro occorrenti per le celle degli eminentissimi signori Cardinali, e conclavisti. [text] Letto per Sua Eminenza con lettiera, cortinaggio, tornaletto e sua coperta...con una parte fissa, e l'altra che si alzi\"; pp. 50-51: \"[rubric] Arrivo de signori Cardinali in Roma chiuso che sia il conclave. [text] Quel Cardinale che arriva in Roma sede vaccante, serrato il conclave, deve mandare...due per servitore al giorno, ed al decano, ed ufficiali paoli tre.\"; pp. 56-57: \"[text] Indice. Nota dei mobili ed altro occorrente per le celle degli eminentissimi signori Cardinali e conclavisti...arrivo dei signori Cardinali in Roma, chiuso che sia il conclave, c. 50.\""], "520": ["This tiny illustrated manuscript contains a detailed inventory of the physical furnishing and other necessities required for holding a conclave. The work offers an opportunity to study in a concrete way the physical reality and needs of the cardinals and their servants permitted to attend the conclave: it is a descriptive list of items, numbered from A to T, each one with a picture. Although there is no acknowledged author, the use of Italian instead of Latin and the content make it likely that the manuscript was employed by workmen responsible for building the necessary furnishing. All the dimensions are given precisely, and all the objects are pictured in simple line-drawings, so it seems that the present work translates the regulations of the Curia into terms intellegible to a workman. The text refers to pope Pius VI as being still alive (\"Pio VI felicemente regnante\"), so we can assume that the manuscript was prepared for the conclave of the year 1800."], "852 8": ["CUL|bRBCAG|hRobbins MS 238|xCIN=JKN"], "008": ["060801k17751799it ||||||||||||00|||ita|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Nota dei mobili, ed altro occorrenti per le celle degli emi[nentissimi] sig[nori] Cardinali, e conclavisti."], "546": ["Italian."], "300": ["63 pages :|bpaper ;|c190 x 140 (160 x 110) mm bound to 200 x 145."], "500": ["Ms. codex.", "Title from p. 1.", "Collation: Paper, pp. vi + 29; 1-2\u2078 3\u2075. Watermark: a bird on a \"trimontium\" enclosed within a circle. Original pagination in the upper corners, by the hand of the scribe : numbered 1-52 with 49 bis.", "Layout: Written in up to 23 long lines. Very narrow lateral margins. The manuscript is not ruled. The drawings are on the left page while the description is on the right page.", "Script: Written in a tidy cursive script by one hand.", "Binding: Green and white striped paper over pasteboards, possibly original.", "Origin: Written in Italy at the very end of the 18th century, during the papacy of Pius VI (1775-1799).", "On the first flyleaf, written in pencil by a 20th century hand: \"CGLL 2146\" (or \"CGU 2146\").", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 238."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "090 8": ["Robbins MS 238"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS24": {"001": ["ocn251503512"], "245 10": ["Decisiones Romanae Rotae coram Cardinali Plato."], "040": ["BOL|eamremm|cBOL"], "505 8": ["Volume 2: Fol. 1r-174r (i.e. fol. 9r-182r): \"[Decisiones Romanae Rotae coram Cardinali Plato liber secundus] Cesenatensis spolii Ven. 21 Aprilis 1589. In hac causa saepius proposita antea Domini nunquam potuerunt esse concordes, aliis extimantibus bona de quibus agitur ab Antonio Tiberto Canonico Cesenatensis ...[Civitatis Castelli spolii bonorum lunae 18 februarij 1592 ] Nec obstat Bulla Pii Quinti edita super reformatione Rotae quia non mandat simpliciter in causa civili supersederi sed ita demum si causa criminalis sit praeiudicialis patet autem ex prefatis non esse preiudicialem in casu proposito causam criminalem causae civili. Finis\""], "003": ["OCoLC"], "035": ["(OCoLC)251503512"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=114;fullview=yes"], "008": ["080916q15751625it 000 0 lat d"], "099": ["Robbins MS 24"], "505 0": ["Volume 1: Fol 1r--241r (i.e. fol. 8r-248r): \"[Decisiones Romanae Rotae coram Cardinali Plato liber primus] Vercillensis pensionis spolii lunae 5 Maii 1586. Proposui dubium in una Vercellensis pensioni spolii an sententia in partibus lata ad favorem Marii Antonii Babbi veniret confirmanda aut infirmanda...[Lunae 17 Aprilis 1589] in conditionem prout ipsi habebant gravari non debet ut pro crescenti [--] ingenti [--] aliquid soluatur.\""], "100 1": ["Piatti, Flaminio,|d1552-1611."], "520": ["Transcript of decisions in cases brought before Cardinal Flaminio Piatti in the Sacred Roman Rota. Indexes of decisions are arranged alphabetically by diocese at the beginning of each volume. Flaminio Piatti, appointed cardinal by Gregory XIV in 1590, was a judge in the Rota Romana under Sixtus V."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CU-L|bRBCAG|xCIN=JKN"], "610 20": ["Catholic Church.|bRota Romana."], "500": ["Ms. codex.", "Title from title page.", "Collation [Volume 1]: Paper, fol. i + 248 + 1. Contemporary foliation skips index and starts at first page of text (i.e. fol. 8r).", "Collation [Volume 2]: Paper, fol. i + 185. Contemporary foliaiton skips index and starts at first page of text (i.e. fol. 9r); last three folios are unnumbered.", "Layout: Written in 22 long lines.", "Script: Written in a cursive script by at least two hands.", "Binding: Bound in limp vellum.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 24."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "005": ["20080916124517.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "260": ["Italy,|c[between 1575 and 1625]"], "300": ["|3Original:|a2 v. (248, 185 leaves) :|bpaper ;|c270 x 200 (240 x 112) mm bound to 270 x 200 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 98-97) and positive (Robbins MS 24)"]}, "RobbinsMS8": {"001": ["06-B4280"], "245 10": ["Commentum libri Decretalium."], "505 0": ["Fol. 1r-406v: \"[rubr.] Commentum libri Decretalium et prohemium rubrica. [text] Ad Dei omnipotens gloria et universalis Ecclesie decus et decorem necnon rei publice...quia sicut odoratus fetorem discernit sive sentit et fugit, sic tractatus ipsius crimina detestatur et punit. [rubr.] Prohemium libri Decretalium. [text] Gregorius episcopus: omnes sunt episcopi licet vocentur archiepiscopi...dampnaturo. [rubr.] De summa trinitate et fide catholica rubrica. [text] Quoniam omne quod non est ex fide peccatum est...durat tamen quandoque propter accessiones quod dic ut legitur... [rubr.] Explicit liber primus. Incipit secundus de iudiciis rubrica. [text] De quo vult Deus et cetera supple ita...Explicit liber secundus. Deo gratias.\""], "520": ["This manuscript is a very precious illuminated copy of the commentary on the Decretales by the cardinal Henricus de Segusio; there are very few marginal notes, and the handwriting is extremely neat, quite close with the \"textualis formata.\" No glosses are provided."], "530": ["Selected digital images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=104;fullview=yes"], "100 0": ["Henricus,|cde Segusio, Cardinal,|dapproximately 1200-1271."], "852 8": ["CUL|bRBCAG|hRobbins MS 8|xCIN=JKN"], "246 2": ["|iSecundo folio: |atitubabant quid"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060905q13201340it ||||||||||||00|||lat|d"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a406 leaves :|bparchment ;|c440 x 285 (235 x 195) mm bound to 455 x 300 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-17) and positive (Robbins MS 8)"], "561": ["The manuscript was at one time part of the collection of John Howell."], "500": ["Ms. codex.", "Title from opening rubric, fol. 1r.", "Collation: Parchment, fol. ii (modern paper) + 406 + ii (modern paper); 1-16\u00b9\u00b2 17\u2076 18-19\u00b9\u00b2 20\u00b9\u00b0 21-34\u00b9\u00b2 35\u2076. Catchwords in the middle of the lower margin, on verso, by the hand of the scribe. Quire signatures in the right corner of the lower margin, in red ink, using letters and symbols. The manuscript was copied with the pecia system: many pecia marks are still visible, although cropped, in the outer margins. The average length of each pecia appears to be 5 folios.", "Layout: Written in two columns, 101 lines in each column. Running titles in the upper margin. Ruled in lead; prickings visible in the lower and upper margin. Wide margins.", "Script: Written in a textualis libraria script (littera Bononiensis), apparently by one hand.", "Decoration: Two historiated initials on fol. 1r (on 9 lines) and 199r (on 11 lines), both representing Pope Gregory IX, painted in red, pink, white, and yellow on blue background. Two vertical borders on the same folios bearing grotesque characters, humans, animals, birds, and flowers, painted in pink, yellow, and blue. Painted initials representing human faces, animals, stylized flowers, and geometrical motives, mostly on 4 lines. On the lower margin of fol. 1r there is the painting of a lion, brown on blue background with red border; on fol. 199r there is the painting of a yellow bird. Many 3-line alternating red and blue pen flourishing initials throughout the text. Alternating red and blue paragraph marks. Red rubrics, and alternating red and blue running titles in the upper margins.", "Binding: Brown leather over wooden boards, blind tooled with fillets, stamps, and fleurons. Four new leather closing straps: top, bottom, and side. New spine with some of the old leather glued to it.", "Origin: Written and decorated in Italy, possibly in Bologna, between 1320 and 1340.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 8.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), I BX1935 .H518 le."], "090 8": ["Robbins MS 8"], "260": ["[Bologna?,|cbetween 1320 and 1340]"], "581": ["Henricus de Segusio, In primum [-quartum] Decretalium librum Commentaria ... 4 vols. (Venetiis: apud Ivntas, 1581; reprint, Torino: Bottega d'Erasmo, 1965)."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS22": {"001": ["06-B4066"], "245 10": ["[De citationibus] ;|b[Statuta Universitatis Bononiensis]"], "505 0": ["Fol. 1r-23r: \"[text] In nomine Patris et filii et Spiritu Sancti, amen, et ad honorem et statum Universitatis Bononiensis et nostre nationis provincialis...Ego Bonacursius de Aliseis de Florentia in legibus dictus doctor Bononie morans...colliges evidenter hic in aliquo loco circa aliquam consuetudo contradiceret spiritualis municipalis.\""], "505 8": ["Fol. 23v-24v: \"[rubr.] Rubrica de hiis que pertinent ad doctores et processum lectionum. Nota quod doctores et magistri non possunt facere collectam nisi post festum sancti Andree. [text] In nomine Domini amen. Universitate scolarium tam ultramontanorum quam citramontanorum per generalem bidellum...Quod si non fecerit non possit proprio aliquam collectam facere nisi primo omnes penas solvit in quibus incidenter et fecit dictum depositum a qua pena se nullatenus valeat excusare cum semper per se vel per substitutum possit ad puncta venire.\""], "520": ["The first 23 folios of the manuscript contain a diminutive law tract by the Florentine exile Bonaccorso degli Elisei, a doctor in law from the University of Bologna and a contemporary of Dante Alighieri. The last 2 folios include the text of the earliest known statutes governing the Faculty of Law at the University of Bologna, presumably promulgated in 1252. The manuscript was once the final (and smaller) part of MS 67 (its fol. 118-141) in the library of Admont Abbey, Austria, whose first one hundred and seventeen folios contained the Casus longi of Bernardo da Parma on the Decretals of Gregory IX. The present location of the first part of MS 67 is not known."], "530": ["Selected digital images available in Digital Scriptorium."], "300": ["|3Original: |a24 leaves :|bparchment ;|c380 x 240 (290 x 170) mm bound to 385 x 259 mm.", "|3Copy: |a1 microfilm reel :|bnegative and positive (Robbins MS 22)"], "510 4": ["Maffei, Domenico, Domenico Maffei, \"Un trattato di Bonaccorso degli Elisei e i pi\u00f9 antichi statuti dello Studio di Bologna nel manoscritto 22 della Robbins Collection,\" Bulletin of Medieval Canon Law 5 (1975): 73- 101 (includes complete transcription of the Statutes of the University of Bologna, and partial transcription of Bonacursius's tract)."], "852 8": ["CUL|bRBCAG|hRobbins MS 22|xCIN=JKN"], "260": ["[Southern France?,|cbetween 1275 and 1325]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060823q12751325fr ||||||||||||00|||lat|d"], "246 2": ["|iSecundo folio: |alex non antiqua"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "100 1": ["Elisei, Bonaccorso degli,|d13th cent."], "561": ["The manuscript was sold to E. P. Goldschmidt in London, who in turn offered it for sale after June 1940. It was acquired for the Bodmer Collection in Zurich and later sold to H. P. Kraus, from whom it was acquired for the Robbins Collection in 1971."], "500": ["Ms. codex.", "Fol. 1r, title from the spine; fol. 23v, title suplied by cataloger.", "Collation: Parchment, fol. ii (modern paper) + 24 + ii (modern paper); 1\u00b9\u2070 2\u00b9\u00b2 3\u00b2. Catchwords in the right corner of the bottom margin, by the hand of the scribe, framed in brown ink. No quire numbering is provided. No contemporary foliation; double modern foliation, in pencil by two different 20th century hands. The first one is on the upper right corner, and goes from 118 to 141; the second is in the right bottom corner, and goes from 1 to 24.", "Layout: Written in two columns of 62 lines each. Ruled in lead. Prickings visible only in the bottom and upper margins. Wide margins, very few marginal additions and notes.", "Script: Written in a textualis libraria script, by one hand. Above top line.", "Decoration: Fol. 1r, 6-line blue and red pen flourishing initial. Alternating red and blue penworked initials throughout the text, mostly on 2 lines. Red and blue alternating paragraph signs, red rubrics.", "Binding: Grey paper over pasteboard. Quarter bound in leather, title gilt tooled on the spine: \"Bonaccursius de Aliseis. De citationibus. MS.\"", "Origin: Written possibly in Southern France, or in Italy but by a scribe trained in Southern France, between the last quarter of the 13th century and the first quarter of the 4th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 22."], "LEADER": ["00000cam 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=113;fullview=yes"], "090 8": ["Robbins MS 22"]}, "RobbinsMS129": {"001": ["ocn192024923"], "245 10": ["[Rules governing the sisters of the H\u00f4tel-Dieu de Laon]"], "040": ["BOL|eamremm|cBOL"], "520": ["Texts concerning the rules and regulations of the religious daughters of the H\u00f4tel-Dieu of Laon."], "110 2": ["Catholic Church.|bDiocese of Laon (France)"], "260": ["Laon, France,|cbetween 1671 and 1727."], "099": ["Robbins MS 129"], "581": ["Saint-Denis, Alain. L'H\u00f4tel-Dieu de Laon, 1150-1300: institution hospitali\u00e8re et societe aux XIIe et XIIIe si\u00e8cles (Nancy : Presses Universitaires de Nancy, 1983)"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (paper) + 43 + ii (parchment and paper); 1-10\u2074 11\u00b2 (+1).", "Layout: Written in 34 long lines; frame ruled in lead, double vertical and horizontal bounding at top, bottom, outer, and inner margins of text block, continuing out to edge of page.", "Script: Main text (p. 1-82) written in a neat, humanistic book script by one hand; p. 83 written in a second hand.", "Decoration: 12-line initial infilled in red, been and brown ink at beginning of text, p. 1.", "Binding: Maroon printed paper over pasteboard, vellum corners and spine; 4 cloth ties (intact).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 129."], "300": ["|3Original:|a84 pages :|bparchment ;|c365 x 290 ( 272 x 199) mm. bound to 374 x 295 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 05-07) and positive (Robbins MS 129)"], "610 20": ["H\u00f4tel-Dieu de Laon."], "650 00": ["Monasticism and religious orders|vRules."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=77;fullview=yes"], "008": ["080214q16711727fr 000 0 fre d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, February 2008."], "546": ["In French."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080214050825.0"], "505 0": ["P. 1-73: \"[text] Doyen et chapitre de l'Eglise de Laon a l'Eglise de rome immediatement subjects...et involontaires \u00e0 recevoir les monitions ou corrections de icelles Voulons \u00e0 Nous ou \u00e0 nostre commis estre signifi\u00e9 afin de y donner provision et remede par punitions convenables comme au cas appartiendra\" ; p. 74: ruled but blank ; p. 75: \"[text] Extrait des registres de parlement\" ; p. 76: ruled but blank ; p. 77-82: \"[text] Carte de visite et reformation dress\u00e9e par nous, Benjamin de Brichanteau, Evesque et Duc de Laon...et du consentement desdits sieurs de chapitre, desquelles modifications le texte en a est\u00e9 remply\" ; p. 83: \"[text] Extrait des registres aux actes capitulaires de l'Eglise Cathedral de Laon du vingt sept Aoust mil sept cent vingt sept...Par Mr. le Doyen en freference de Mrs Barbier Tucien maitre et sous maitre de l'Hotel Dieu Mrs Bott\u00e9e Levent l'ain\u00e9 et Bailleu Butillier sign\u00e9 Jadot secretair du chapitre de la ditte Eglise\" ; p. 84: ruled but blank."], "035": ["(OCoLC)192024923"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS1": {"001": ["05-B14617"], "245 10": ["[Carta executoria]"], "505 0": ["Fol. 1r-47r: \"[Inc.] Por la gracia de dios rey de Castilla de Leon de Aragon de las dos Secilias de Jerusalem de Portugal de Navarra de Granada...[text] Al nuestro iusticia mayor y a los del nuestro consejo presidentes e oydores de las nuestras audiencias Alcades Alguaciles de la nuestra casa corte e chancillerias...Salude y gracia sepates que pleito paso ese trato en la nuestra corte e chancilleria...[exp.]...esta nuestra carta executoria de las dichas sentencias difinitivas en el dicho pleito dadas e scripta en pergamino de cuero y sellada con nuestro sello de plomo pendiente en filos de seda a colores librada de los dichos nuestros alcades de los hijos dalgo e de otros oficiales e de la dicha nuestra audiencia. Dada en la Ciudad de Valladolid a treinta un dias del mes de henero de mill e quinientos y noventa e nueve anos\"; fol. 47v-48v: ruled but blank."], "520": ["Contains documentation for two legal matters involving the Manueco family: a letters patent issued in 1599 in response to the petition of Antionio, Juan, Miguel, Gabriel, and Francisco de Manueco; and the lawsuit for exemption from taxation on the grounds of noble lineage, initiated in 1599 by Rodrigo Manueco, father of the petitioners, tried in Valladolid. Fol. 47r bears multiple signatures. Title page missing. Some marginal notes in a later (possibly 17th cent.) hand."], "530": ["Selected digital images available in Digital Scriptorium."], "100 0": ["Philip |bIII,|cKing of Spain,|d1578-1621."], "852 8": ["CUL|bRBCAG|hRobbins MS 1|xCIN=JKN"], "008": ["051117s1599 sp ||||||||||||00|||spa|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Spanish."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, November 2005."], "300": ["|3Original:|a48 leaves :|bparchment ;|c310 x 215 (210 x 110) mm bound to 327 x 228 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-10) and positive (Robbins MS 1)"], "561": ["Early provenance unknown. Manuscript was part of the original collection assembled by Lloyd M. Robbins."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. 48 (unfoliated); 1\u2074\u2078 (24 nested bifolia folded in half).", "Layout: Written in 28 long lines; text block framed by double bounding-lines ruled in ink, individual lines ruled in lead; only prickings guiding double bounding-lines visible, often cropped.", "Script: Written in a neat humanistic book hand by one hand.", "Decoration: Portrait on fol. 46r; large gold headings on red and blue backgrounds throughout.", "Binding:17th century tooled leather binding over pasteboard with gold leaf; decorations include clasped hands, deer, unicorns and flowers; single pink and gold cord threaded through spine and center of text block at two points holds text block to binding. Traces of front and back clasps at top, bottom and fore edge, now lacking.", "Accompanying materials: Seal mentioned in text (fol. 47r) is lacking.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 1.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), gKB170 .F315 CE 1599."], "090 8": ["Robbins MS 1"], "260": ["Spain,|c1599."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=97;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS101": {"001": ["ocn759598167"], "245 10": ["Elementa iuris canonici ;|bDeffinitiones (sic), et conclusiones institutionum canonicarum."], "040": ["BOL|eamremm|cBOL|dBOL"], "505 8": ["Fol. 160r-251v: Deffinitiones (sic), et conclusiones institutionum canonicarum \"[text] \"Actiones humanae...Finis tertiae partis.\""], "003": ["OCoLC"], "260": ["Italy,|c1692"], "008": ["111104s1692 it 000 0 lat d"], "099": ["Robbins MS 101"], "505 0": ["Fol. 1r-150r: Elementa iuris canonici \"[text] Pars p[rim]a : De origine juris can[oni]ci et causis eius. Jus canonicu[m] decretis pontificu[m], et statutis concilionu[m] tu[m] Generaliu[m], tum provincialiu[m] constat...Pars operis superest, pars e[st] exacta laboris. Igitur hoc anno literario hic teneat nostras ancora iacta rates. Finis\" (N.B. this last phrase is an allusion to Ovid Ars Amatoria 1.771-2: \"Pars superat coepti, pars est exhausta laboris. / Hic teneat nostras ancora iacta rates\")."], "100 1": ["Benino, Bartolomeo."], "546": ["Latin"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Titles from fol. 1r and fol. 160r.", "Text block of the first text (1r-150r) appears to have been re-cut after the text was written in order to fit the format of the second text (160r-251v), eliminating margins and occasionally cropping words at the bottom of pages.", "Layout: Written in long lines.", "Binding: Vellum over pasteboard; title on spine reads \"Ius Canonicum Manoscritto.\"", "Written in Rome, in the hand of Benino himself. Fol. iir reads: \"In celeberimo Romae studio fo Acceptu \u00e0 me Bartolomeo Benino Anno Domini 1692\" ; fol. 154 reads: \"In sapientissimo Romae studio factum \u00e0 me Bartolomeo Benino Anno Domini 1692.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 101."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts, October 2011."], "005": ["20111104095123.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)759598167"], "300": ["|3Original:|a251 leaves :|bpaper ;|c195 x 130 (195 x 130) mm bound to 205 x 130 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 03-72) and positive (Robbins MS 101)"]}, "RobbinsMS61": {"001": ["ocn600220099"], "245 10": ["[Collection of apostolic letters]"], "040": ["BOL|eamremm|cBOL"], "520": ["A collection of transcripts of apostolic letters (favors, privileges, declarations, bulls, constitutions, etc.) issued by popes from Adrian IV to Clement X. Includes letters from Adrian VI, Clement IV, Eugene IV, Nicholas V, Pius II, Leo X, Clement VII, Paul III, Pius IV, Pius V, Gregory XIII, Sixtus V, Clement VIII, Paul V, Gregory XV, Urban VIII, Innocent X, Alexander VII, Clement IX, and Clement X. Document on fol. 275r-285v is sealed and authenticated by Franciscus Serantonius, Apostolic Notary (fol. 285v); document on fol. 406r-410v is sealed and authenticated by Fabritius [---], Apostolic Notary (fol. 410v). Manuscript leaves are interspersed with printed material (fol. 8-15, 22-37, 51-60, 65-68, 89-97, 142-145, 185-201, 248-257, 289-295, 386-397, 426-427, 463-464, 492- 503). Foliation jumps from 225 to 230; folio 388 incorrectly numbered as 387 (thus the number 387 appears on two consecutive folios)."], "510 4": ["Phillipps, T. Cat. ms.,|c5361."], "110 2": ["Catholic Church.|bPope."], "260": ["Italy,|c[between 1650 and 1699]"], "008": ["100405q16501699it 000 0 lat d"], "099": ["Robbins MS 61"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "003": ["OCoLC"], "546": ["Latin"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 5361)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Written in long lines.", "Script: Written in early modern cursive script by various hands.", "Binding: Vellum over pasteboard. Spine badly torn at top, missing a piece. Title on spine reads \"Registrum bullarum.\"", "Accompanying materials: Notarial seals on fol. 285v and 410v.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 61."], "583": ["|zCataloged from existing description and in hand by Alexandre Roberts, April 2010."], "005": ["20100405024615.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)600220099"], "300": ["|3Original:|a678 leaves :|bpaper ;|c265-280 x 205 bound to 290 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-54) and positive (Robbins MS 61)"]}, "RobbinsMS124": {"001": ["06-B3916"], "260": ["[Italy, Veneto, |cbetween 1506 and 1525]"], "505 0": ["1. Fol. 1r: \"[table of contents] Campesium a carta 1, Campuslongus a carta 25...Cartanum a carta 45.\"; 2. Fol. 1r-15v: \"[rubr.] Registrum abbreviatum omnium instrumentorum monasterii Santae Crucis de Camposion tam antiquorum quam modernorum eorum, que sunt in rotulis distincta secundum loca in quibus sunt ipse terre praenotatis eorum nominibus ut immo patebit. Et primus in Campesio. [text] Livellum domine Amerine et eius filii Bonaventure...signatus numero 183.\"; 3. Fol. 16r-18r: \"[rubr.] Donationes facte monasterio Sanctae Crucis de Camposion a diversis viris et faeminis per diversa tempora. [text] Donatio facta per dominum Ezzelino da Romano et per nonnullos alios...de uno manso impertinentis Bassani.\" 4. Fol.19rv: [rubr.] Privilegia et gratie concesse monasterio Sancte Crucis in diversis temporibus. [text] Privilegia Lotarii tertii imperatoris pro immunitate monasterii...procuratore dicte ecclesie.\"; 5. Fol. 20r-23r: \"[rubr.] Instrumenta reliquorum contractuum preter livella in Campesi. [text] Testificatio quadam quod contractum (?) Campesii...Angarani et cetera ut in eo.\"; 6. Fol. 24v-26r: \"[rubr.] In villa Campi Longi. [text] Livellum Manfredum quondam Riprandi de Foza...facta monasterio Sancte Crucis per Bonoram qui Nicolai de Campo Longo.\"; 7. Fol. 27r-28r: \"[rubr.] In villa Olerii. [text] Livellum Antonii quondam [...] Ognibene detto Bonolo...olerii secudum que debet...\"; 8. Fol. 29r-30v: \"[rubr.] In villa Vallistagne. [text] Livellum solidi donati quondam [...] Azolini de Valstagna...bone monete et non aliud.\"; 9. Fol. 32rv: \"[rubr.] In villa Foze. [text] Livellum communis Foze de monte Mella pro quo tenetur...per dominum Andream priorem Sancte Crucis 1483.\"; 10. Fol. 33v: \"[rubr.] In villa Cismonis. [text] Livellum communis Cismoni...in ipsa petri (?) terre.\"; 11. Fol. 34rv: \"[rubr.] In Texino. [text] Livellum Iohannis filii Bebi quondam Morandi...debet annuatim soldos triginta duo.\"; 12. Fol. 35r: \"[rubr.] In villa Povedii. [text] Livellum Bompressi quondam Petri de Solagna de medio campo terre...ad monasterium libera.\"; 13. Fol. 35v- 36r: \"[rubr.] In villa Romani. [text] Livellum tonxi (?) quondam domini Bendrigeti...pro quibus debet...solidi 18.\"; 14. Fol. 37rv: \"[rubr.] In villa Bursii. [text] Livellum Ioannis quondam Reprandini de Bursio...solidi 10.\"; 15. Fol. 38v: \"[rubr.] In villa Avasii. [text] Conventio quedam pasculandi pecora in monte...nuncium.\"; 16. Fol. 39v-40r: \"[rubr.] In Crespano. [text] Livellum Mathei quondam Alterii de Crespano...et surdos quinque, et non alius.\"; 17. Fol. 41r: \"[rubr.] In villa sancti Zenonis. [text] Livellum Paxolini quondam Guidi de Bolegnella...monasterio Sancte Crucis quas tenebat titulo lota[...].\"; 18. Fol. 42r: \"[rubr.] S. Abdon et Senten. [text] Investitura facta per priorem...una facta fuit anno 1433, et altera 1465.\"; 19. Fol. 42v-43v: \"[rubr.] In Valle Mergnani extra Bassanum. [text] Livellum Victoris andree de Curtis de Mergnano...livellum Benedicti quondam Gonfarini.\"; 20. Fol. 44rv: \"[rubr.] In Bassano oppido. [text] Livellum Iuniani quondam Herrici de Ponedo...et unum par gallinarum.\"; 21. Fol. 45r: \"[In villa Rossani.] Livellum Benedicti dicto Brigada...viginti quatuor segalle ad mensuram bassa.\"; 22. Fol. 45v: \"[rubr.] In villa Cartiani. [text] Livellum Donati quondam Boni de Valstagna...et par unum gallinarum.\"; 23. Fol. 46rv: \"[rubr.] In monasterio Campreti et in Campreto. [text] Livellum solidi (?) Benedicti quondam Melchioris de Baldis...et quartum unum [...]misarium fasollorum.\"; 24. Fol. 47v-48r: \"[rubr] In villa Sancti Georgi de Buscho. [text] Livellum Bini Frarzosi et Iohannis Marie Franzosi...livellus continetur.\"; 25. Fol. 49r: \"[rubr.] In villa Tomboli. [text] Livellum Perini quondam Andree de Tombolo...in citadella tenet.\"; 26. Fol. 49v: \"[rubr.] In San Martino de Tuparo. [text] Livella Endrici quondam...tenet Andrigetus de Tombolo.\"; 27. Fol. 50r: \"[rubr.] In villa Labie. [text] Livellum renovationis marsiliani...civis paduani.\"; 28. Fol. 50v: \"[rubr.] In Burgoligo. [text] Livellum Martini quondam...idest pullorum.\"; 29. Fol. 51rv: \"[rubr.] In villa Bregantie. [text] Livellum Boni Iohannis quondam Francisci Brugnoli...et solidos [...].\"; 30. Fol. 52v: \"[rubr.] In villa Sancti Endrici. [text] Livellum [...] quondam Gulielmi de Cassis...pro quod debet solidi 5.\"; 31. Fol. 52v: \"[rubr.] Livellum Bartholomei quondam Nicolai de Lupia...supra dictis terris.\"; 32. Fol. 53r: \"[rubr.] In villa Sclavoni. [text] Livellum Zampetra quondam Gonzi de Sclavono...modium unum bladi.\"; 33. Fol. 54r-55v: \"[rubr.] In villa Angarani. [text] Livellum Catanei quondam Iacobini de Angarano...permutatio facta inter monasterium et ipsum secundum (?) Baldassarrem.\"; Fol. 56r-61v blank."], "520": ["This manuscript is a list of abridged legal documents, but not cronologically arranged: the abridgements are divided into chapters, and each chapter is related to a city or a village in Northern Italy. The documents cited in this manuscript are all connected to the region of Veneto, and particularly the area surrounding Vicenza, Treviso and Belluno; among the villages and cities cited, we have Foza, Valstagna, Bassano, Rossano, Crespano del Grappa, San Zenone degli Ezzelini, Romano d'Ezzelino, Cismon del Grappa, Caltrano, San Giorgio in Bosco, Schiavon, Campolongo sul Brenta, Trissino, Campese. A note added by a later hand mentions the year 1563."], "510 4": ["Phillipps, T. Cat. ms., |c6559."], "852 8": ["CUL|bRBCAG|hRobbins MS 124|xCIN=JKN"], "700 0": ["Phillipps, Thomas,|cSir,|d1792-1872."], "008": ["060817q15061525it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. Use of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Index scripturarum Campesii."], "546": ["Latin."], "300": ["|3Original: |a61 leaves :|bpaper ;|c205 x 155 (160 x 115) mm bound to 210 x 165 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 05-1) and positive (Robbins MS 124)"], "561": ["Flyleaf iv, written in pencil by a 20th century hand: \"Mantua\". This manuscript used to belong to Sir Thomas Phillips, call number 6559. On inside front cover: \"Payne 1883\"."], "500": ["Ms. codex.", "Title from the title page.", "Collation: Paper, fol. ii (modern paper) + 61 + ii (modern paper); 1\u00b2\u00b2\u207b\u00b2 2-4\u00b9\u2074. No catchwords are provided. Contemporary foliation in brown ink in the upper corner in Arabic numerals. In the manuscripts there are at least two different watermarks, not in Briquet.", "Layout: Written in up to 28 long lines, above top line. Frame ruled in lead. Quire numbers in the bottom margin, in the right corner.", "Script: Written in a cursiva libraria, sometimes currens, apparently by two hands: the scribe and the rubricator.", "Decoration: Red chapter headings.", "Binding: Rebound in limp vellum in the year 2003. The previous binding (grey-brown paper over thin, rigid board) is now kept in the manuscript file.", "Origin: Written in Italy, Veneto, during the first quarter of the 16th century, but surely after 1506.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 124."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "090 8": ["Robbins MS 124"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=73;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS240": {"001": ["06-B3560"], "245 10": ["Ordo iudicialis ;|bLiber de exceptionibus."], "505 8": ["2. Fol. 1r-33v: \"[rubr.] Ordo iudicialis [...] Egidium doctorem decretorum [...]. [text] In nomine Domini nostri iesu Christi ego Egidius de P[...] civis bononiensis doctor decretorum licet indignus...testimonium et inimicum. Factum etc.\"", "3. Fol. 58r-74v: \"[rubr.] Incipit liber primus de exceptionibus. [text] Quidem litteris imperavit sub tali forma Gregorius...fideiussit pro talis//.\""], "520": ["This is a composite ms. codex, most likely compiled and assembled for a legal practitioner. The manuscript offers its users a series of formulae extracted from various collections of Canon Law. Both sections are incomplete. The flyleaf IIr contains the text of an anonymous sermon which lacks the end. Many notes, some rubbed, throughout both sections of the manuscript. On flyleaf Iv there is a small table of contents written by a 14th century hand."], "LEADER": ["00000ctm 2200000 a 4500"], "300": ["50 leaves :|bparchment ;|c210 x 135 (155 x 105) mm bound to 216 x 148 mm."], "246 0": ["Incipit de exceptionibus qui dicitur auctor et reus"], "852 8": ["CUL|bRBCAG|hRobbins MS 240|xCIN=JKN"], "700 0": ["Tancred,|dca. 1185-1236?"], "260": ["[Paris?,|cbetween 1280 and 1300]"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection.Robbins Collection."], "008": ["060727q12801300fr ||||||||||||00|||lat|d"], "246 2": ["|iSecundo folio:|alevetur ab homine"], "546": ["Latin."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, July 2006."], "100 1": ["Foscarari, Egidio,|dd. 1289."], "561": ["Inside back cover, initials \"c.a.C.b.\" written in pencil by a 20th century hand, possibly by a former owner."], "500": ["Ms. codex.", "Fol. 1r: title from opening rubric. Fol. 58r: title from opening rubric (added title entry for this text from IN PRINCIPIO database).", "Conservation treatment added double-folio handmade paper ends; textblock was resewn with handmade paper wrapper, and boxed. Previous covers (not contemporary to the manuscript) and conservation documentation in curatorial file.", "Collation: Parchment, fol. ii (medieval parchment) + 50 (numbered 1-33 and 58-74); 1-3\u2078 4\u2074 (lacks fol. 3-4) 5\u2078 (lacks the last 3 fols.) 6\u2078 7\u00b9\u00b2 (lacks fols. 5 and 12). Horizontal catchwords on the right side of the bottom margin, on verso. Leaves signed with latin minuscule letters from \"a\" to \"d\" on recto, with lead.", "Layout: Fol. 1r-33v: written in two columns of 50 lines; fol. 58r-74v: written in two columns of 39 lines. Both sections below top line. Ruled in lead. Pricking sometimes visible in the upper margins.", "Script: Written in gothic textualis libraria script by two different scribes: the first one copied fol. 1r-33v, the second one copied fol. 58r-74r.", "Decoration: Penwork red and blue initials, mostly on 2 or 3 lines. Red rubrics. On fol. 58r-74v, red paragraph marks and some initials touched in red.", "Binding: Resewn in handmade paper wrapper.", "Origin: Written in Northern France, possibly Paris, in the last quarter of the 13th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 240."], "505 0": ["1. Fol. IIr: \"[text] Ecce nunc tempus acceptabile [2Cor 6, 2]. Illud verbum est beati Pauli in epistula hodierna...et quod emitur magis diligitur//.\""], "090 8": ["Robbins MS 240"]}, "RobbinsMS300": {"001": ["ocn319876305"], "260": ["Edinburgh, Scotland ,|cca. 1634."], "040": ["BOL|eamremm|cBOL|dBOL"], "505 8": ["Fol. 109r-368v: Feudorum liber tertius (sic) continens ea quae ad amissionem feudi pertinent de resignationibus et renunciationibus diegesis.\"", "Fol. 369r-392v: [Summary records of salient Parliamentary sessions, 1581-1633] ; fol. 393r-425v: blank."], "520": ["Three texts on Scottish law."], "300": ["|3Original:|a425 leaves :|bpaper ; 200 x 155 mm, bound to 205 x 160 mm."], "008": ["090501s1634 stk 000 0 lat d"], "099": ["Robbins MS 300"], "003": ["OCoLC"], "245 00": ["[Observations on contemporary Scottish feudal law ; |bCommentary on the Feudorum liber ; Summary records of salient Parliamentary sessions, 1581-1633]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CUL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. 425 (infrequent contemporary pagination present); i + 1-31\u00b9\u00b2 32\u2078 34-35\u00b9\u00b2 (last fol. is pastedown); catchwords.", "Layout: Written in long lines, number of lines per page varies; contemporary signing in Arabic numerals in tail margins, mostly cropped but added back in pencil by a later hand. Some guide scores present particulary in third part.", "Binding: Contemporary binding of English calf.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 300."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, May 2009."], "005": ["20090501123425.0"], "505 0": ["Fol. 2r-99r: \"Some generall observations [on Scottish feudal law]; fol. 5v-7r: \"Anent the table and continuation of sumonds\" ; fol. 7v-12r: \"Of kirks and benifices\" ; fol. 12r-14r: \"Of the priviledge of bishops, abbots, etc.\" ; fol. 14r-19v: \"Of the jurisdiction of bishops\" ; fol. 19v- : \"Of heirs and ex[ecutors?] and of the difference betwix her[itable] and mov[able] bonds\" ; fol. 99v-108v: blank."], "035": ["(OCoLC)319876305"], "546": ["Commentary on the Liber feudorum in Latin, other texts in English."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS91": {"001": ["06-B4424"], "245 10": ["[Arbre des batailles /|ccompos\u00e9 par Honor\u00e9 Bonet prieur de Salon]"], "505 0": ["1. Fol. 1r-127r: \"[rubr.] L'arbre des batailles compos\u00e9 par Honor\u00e9 Bonet prieur de Salon. Dedi\u00e9 au roy Charles VI. [text] La sainte couronne de France en laquelle auiourdhuy per l'ordonnance de Dieu regne Charles Le Sixieme, en celuy nom tre bien...et produise a la sienne saincte gloire de paradis, amen.\"; 2. Fol. 127v-130v: table of contents."], "520": ["This work by Honor\u00e9 Bonet is an important discussion of the right to arms, and was composed at the end of the 14th century, and possibly between 1386 and 1389. The first folio of this manuscript is missing, and was therefore replaced in the 18th century. The text is sometimes attributed to Christine de Pisan (ca. 1364-ca. 1431; see fol. iv, viv for seller's manuscript description); in fact, only books III and IV of Christine's \"The book of fayttes of armes and of Chyualrye\" are based on \"L'Arbre de bataille\". A contemporary hand underlined many passages in the text and made some marginal notes and additions in a cursiva currens hand."], "300": ["|3Original: |a130 leaves :|bpaper ;|c270 x 210 (165 x 125) mm bound to 280 x 215 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 02-74) and positive (Robbins MS 91)"], "510 4": ["Honor\u00e9 de Bonet, L'Arbre des batailles, ed. Ernest Nys (Brussels: C. Muquardt, 1883."], "852 8": ["CUL|bRBCAG|hRobbins MS 91|xCIN=JKN"], "246 2": ["|iSecundo folio: |afortes sont"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060911s1425 fr ||||||||||||00|||frm|d"], "546": ["Middle French."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "100 1": ["Bonet, Honor\u00e9,|dfl. 1378-1398."], "561": ["At one time, the manuscript was part of the library of the Abbot of Mersan, no. 1150 in his catalogue (note on flyleaf iii v, in the hand of one of the later owners (late 18th century?): \"Ce manuscrit provient de la biblioth[\u00e8que] de l'Abb\u00e9 de Mersan, no. 1150 de son catalogue. Il a \u00e9t\u00e9 fait pour Charles VI, except\u00e9 la pr[emi\u00e8]re page qui a \u00e9t\u00e9 recopi\u00e9e\"). Further down the page, a note, in all probability in the same hand, with a reference to a text published in the M\u00e9moires de l'Acad\u00e9mie des Inscriptions establishing the name Bonnet for the author of the work, as opposed to the (erroneously) corrected \"Bonnor\" appearing on fol. 1r. Another note, in the same hand, refers to Monseigneur de Roquefort's \"Glossaire de la langue romaine\"; according to this work, there were 18 known manuscripts of the \"L'arbre des batalles\" in the Royal Library at the time. This manuscript used to belong to Henry J. B. Clements: on the inside front cover there is his bookplate showing an eagle, the motto \"Patris virtutibus\" and the name \"Henry J. B. Clements.\""], "500": ["Ms. codex.", "Title from fol. 1r (the whole fol. 1rv has been copied by a later hand).", "Collation: Paper, fol. i (marbled paper) + ii (modern paper) + 130 + ii (modern paper) + i (marbled paper); 1- 5\u00b9\u00b2 6\u00b9\u2076 7-9\u00b9\u2074 10\u00b9\u2070. Contemporary foliation in Roman numerals, red ink, in the upper margins in the right corner (ii to ccxxvii). Catchwords in the right side of the lower margins, on verso, sometimes decorated with grotesques. Watermarks: a \"raisin\" which is a variant of those in Briquet 11992-13007; an \"arc\" not in Briquet (the closest seems to be Briquet 809).", "Layout: Written in 30 long lines. Wide margins. Contemporary foliation using Roman numerals in the upper margins, in the right corner.", "Script: Written in a cursiva libraria script close to the \"littera bastarda\", apparently by one scribe.", "Decoration: Red initials, sometimes penworked, throughout the text, mostly on 2 lines. Red rubrics and red paragraph marks. Many \"grotesques\" showing animals, human heads and \"droleries\".", "Binding: Red morocco over pasteboards; gilt spine; gilt edges. Title on spine: \"Bonor Arbre des Bataille Manuscr. 1425.\" Marbled paper used for the flyleaves (red, yellow, blue and green).", "Origin: Written in Limoges, France, in 1425. The colophon appearing on fol. 127r states that the manuscript was copied by one Johannes de Quadrinno, diocesan clerk in Limoges: \"Anno domini millesimo quadrincentesimo vicesimo quinto presens liber fuit scriptus per Johannes de Quadrinno clericum diocesis Lemovicensis. Quem Dominus in eternum benedicat amen. Finito libro sit laus Domino Ihesu Christo amen. Benedicamus Domino deo gratias.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 91."], "700 1": ["Clements, Henry J. B.|q(Henry John Beresford),|d1869-1940."], "090 8": ["Robbins MS 91"], "260": ["Limoges,|c1425."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=58;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS114": {"001": ["ocn669862775"], "245 10": ["Acta synodi provincialis goritiensis de anno 1768."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Acts of a synod held in October 1768 in the province of Gorizia, located in the Friuli-Venezia Giulia region of Italy. Articles 1 and 3 are copies of the opening and closing statements by Karl Michael von Attems, Archbishop of Gorizia, made on 15 October 1768 and on 18 October 1768, respectively. The materials were originally collated by one Johannes Petrus Barbadicus, acting delegate notary (f. 208r)."], "510 4": ["Phillipps, T. Cat. ms.|c7312."], "110 2": ["Catholic Church.|bArchdiocese of Gorizia (Italy)"], "260": ["Italy,|cafter 1768."], "099": ["Robbins MS 114"], "700 1": ["Attems, Karl Michael von,|d1711-1774.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "581": ["Chiara de Nicolo, Daniela Fain, Alessandra Martina, and Luigi Tavano, \"Fonti archivistiche su C. M. d'Attems a Gorizia,\" in Carlo M. d'Attems, primo arcivescovo di Gorizia 1752-1774 fra Curia Romana e stato absburgico, 2 vols. (Gorizia: Istituto di Storia Sociale e Religiosa, Istituto per gli Incontri Culturali Mitteleuropei, 1988), 1:59-99; see especially p. 99 for the identification of two relevant manuscripts, both in the Biblioteca Civica di Gorizia: MS 113 is an 1870 copy, made from the exemplar found in the de Grazia library, of the Scritti illustrativi il Sinodo quasi provinciale Goriziano del 1768, and MS 151-bis is an 18th-century copy of the Acta Synodi Provincialis Goritiensis de anno 1768; see also Gabriele de Rosa, \"Il sinodo provinciale del 1768,\" in Carlo M. d'Attems, 2:343-70."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of the Colonna family (their red stamp visible depicting a column within a circle on a front flyleaf, the title page, the first page of text, the last page of text, and a back flyleaf). It was also in the collection of Sir Thomas Phillipps (his no. 7312). Other library markings, \"1015\" and \"58,\" in pencil on front pastedown."], "500": ["Ms. codex.", "Title from title page (fol. iiir).", "Collation: Paper, fol. i (modern paper) + ii (contemporary paper) + 213 (foliation begins on first page of text); 1\u00b22 -5\u00b9\u00b2 6-8\u00b9\u2070 9-10\u00b9\u00b2 11\u00b9\u00b2(-1) 12\u00b9\u00b2 13\u00b9\u2070 14\u00b9\u00b2 15\u2076 16\u00b9\u00b2 17\u2076 18- 19\u00b9\u00b2 20\u2078 (-1); catchwords at the bottom of each verso.", "Layout: Written in 26-29 long lines.", "Script: Written in a neat cursive script by at least six hands.", "Binding: Colored paper with floral pattern over pasteboard; spine is worn and faded.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 114."], "300": ["|3Original:|a213 leaves :|bpaper ;|c280 x 195 (250 x 150) mm bound to 295 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 03-87) and positive (Robbins MS 114)"], "505 8": ["Fol. 6r-210r: \"Constitutiones et decreta in provinciali synodo Goritiensi edita Anno 1768. Ad laudem omnipotentis Dei. Nos Carolus Michael Dei, et Apostolicae Sedis gratia primus Ecclesiae Goritiensis Archiepiscopus de consilio...Tandem concludetur eodem dicente: Recedamus in pace. Respondentibus omnibus. In nomine Domini. Amen.\"", "Fol. 210r-213v: \"Oratio celsissimi et r[everendissi]mi d[omin]i metropolitani in dimissionem synodi die 18 octobris 1768. Quo auspice ante quatriduum incohavimus magnum huius provincialis synodi opus...qui cum sua benedictione vos dimittit. Benedicat vos Deus pater, et filius, et spiritus sanctus. Amen. Loco (et) sigilli: Carolus Michael Archiepiscopus Guritiensis (sic) et metropolitan(us).\""], "700 3": ["Colonna family.|4asn|4fmo|5CUL."], "008": ["101012q17681799it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre M. Roberts, October 2010."], "546": ["Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20101108062119.0"], "505 0": ["Fol. 1r-6r: \"Oratio a celsissimo et reverendissimo domino domino Carolo Michaele primo metropolitano Goritiensi in aperitionem synodi provincialis die 15ma mensis octobris anno 1768 habita. Dudum jam faustissimum hunc diem exoptavimus...et charitas, et gratia D(omini) N(ostri) I(esu) C(hristi) sit cum omnibus vobis, et maneat semper. Amen.\""], "035": ["(OCoLC)669862775"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS60": {"001": ["ocn656296712"], "260": ["Italy,|cafter 1681."], "040": ["BOL|eamremm|cBOL|dBOL"], "520": ["Transcriptions, in various hands, of treatises on various topics: lay rulership, ecclesiastical immunity, royal jurisdiction, and a bull issued by Pope Innocent XI, Alias felicis recordationis (January 28, 1681). Three of the docuements are authored by the office of the Congregation of Immunity (Sacra Congregatio Immunitatis); the treatise on royal jurisdiction is by Antonio Miroballo. Changes in watermarks follows the major change in texts and paper size creating the following groups: fol. 1-156 and fol. 157-212. Note that fol. ii, 198, and 204 have the same watermark (bird atop a trimontium), indicating that the compiler of the documents at the back of the manuscript was the compiler of the manuscript as a whole, and the author of the table of contents."], "710 2": ["Catholic Church.|bCongregatio Jurisdictionis et Immunitatis Ecclesiasticae."], "510 4": ["Phillipps, T. Cat. ms.,|c7571."], "099": ["Robbins MS 60"], "003": ["OCoLC"], "245 00": ["[Collection of treatises on lay rulership and ecclesiastical immunity]"], "246 08": ["Miscello di cose diverse m. s."], "561": ["Manuscript was once in the collection of Sir Thomas Phillips (his no. 7571); at base of spine is written \"XX\" and below that is the Phillips MS catalog number 7571; at top of spine is a round sticker with the number (upside down) \"287/25.\""], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. iii + 212 + i ; foliation accurate up to fol. 206; thereafter foliator misread \"206\" as \"200, \" thus fol. 207-212 are mislabelled as 201-206 ; fol. ii, fol. 198, and fol. 204 have the watermark of a bird atop a trimontium.", "Layout: Various lines per page.", "Script: Written in various early modern cursive hands: fol. 1-156: neat cursive; fol. 157-184: stylized cursive ; fol. 185-206: 8 different notational cursive hands ; fol. 209-212: neat, cramped, cursive.", "Binding: Vellum over pasteboard. Title on spine reads \"Miscello di cose diverse M. S.\"", "Origin:", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 60."], "300": ["|3Original:|a212 leaves :|bpaper ; fol. 1-156: 260 x 195 (220 x 150) mm ; fol. 157-212: 265 x 200 (250 x 105) mm ; bound to 275 x 210 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-59) and positive (Robbins MS 60)"], "505 8": ["Fol. 1r-86r: \"[title] Pro principatu laicali Consultatio [text] Insurgit antiqua nec iure satis unquam explosa...et immunitatis ecclesiasticae affectari in fraudem, et perniciem communitatum, atque ita consulo sub utriusque fori correctione.\"", "Fol. 87r-156r: \"[title] Responsio pro imunitate ecclesiastica, seu libertate ecclesiae adversus libellum quemdam, cuius titulus est Pro principatu laicali consultatio [text] Exurge (sic) Deus iudica causam tuam memor esto improperiorum tuorum eorum, quae ab insipiente sunt tota die Psal. 73. Offenderem utique potius...et caelos semper habebit propugnatores, et uindices.\"", "Fol. 157r-181r: Antonius Miroballus \"[title] Antonii Miroballi regis consiliaris Pro regia iurisdictione consultatio aduersus ecclesiasticos rebelles...[text] Dominus illuminatio mea. Summae potestati quaedam iura adeo annexa et reservata sunt, quae dignitatem, reverentia auctoritatem, ac potestatem solius maiestatis extra Regalia concernunt...quas multiplices suauiorum musarum Regis spiritus implent. Vale\" ; fol. 182-184: blank.", "Fol. 185r-206r: Curia Romana, Sacra Congregatio Immunitatis: \"[title] Instruzione per Monsignor Segretario della Sacra Congregazione delle Immunit\u00e0 [text] La sac(ra) Congreg(atio) si suol intimare otto, dieci giorni avanti a quella...Alia vero, quae ex communi forma a Secretario expediri solent, vivente Pontifice, posse itidem expediri sede vacante\" ; \"[title] Decisiones, censurae, epistolae et formulae [text] Come vuole la piet\u00e0, e zelo che tiene la santit\u00e0...\" ; documents, transcripts, notes, a circular , and list of attendees ascribed with various dates including: fol. 185-190 (8 September, 1644); fol. 191-193 (20 July, 1666); fol. 197: Notes on Gregory XIV Bulla 7, Sec. 3 (14 Feb, 1670); fol. 198-199 (20 March, 1630); fol. 202 (1680); fol. 195r-196v, 200rv, 203r-204v, and 207r- 208v: blank.", "Fol. 209-211: Pope Innocent XI \"[text] Innocentius Papa XI Ad futuram rei memoriam. Alias foel[icis] record[ationis] Paulo Papae V praedecessori nostro pro parte tunc in humanis agentis boni mei Cosmi Medices Hatruria...non obstare caeterisque contrariis quibuscumque. Datum Romae apud S. Petrum sub Anulo Piscatoris die 28 Januarii 168 Pontificatus nostri Anno quinto."], "583": ["|zCataloged from existing description and in hand by Alexandre Roberts and Jesse Torgerson, August 2010."], "650 0": ["Privileges and immunities, Ecclesiastical."], "700 0": ["Innocent|bXI,|cPope,|d1611-1689."], "008": ["100816q16801699it 000 0 lat d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "581": ["Petrus Gambacurta. De Immunitate Ecclesiae (1622, London); T. L. The Life and Reign of Innocent XI Late Pope of Rome (Abel Roper: London, 1690) esp. pp. 23-36; The bull of Bull of Innocent XI in this manuscript is not present in the standard edition of Papal Bulls. See: Luigi Bilio, ed. Bullarum, diplomatum et privilegiorum sanctorum romanorum pontificum. v. 19 (Turin, 1870) pp. 384-390; Raymond J. Marras. Innocent XI: Pope of Christian Unity. (Notre Dame, 1984); Pierre Blet. Le Clerg\u00e9 de Grand si\u00e8cle en ses assembl\u00e9es: 1615-1715. (Paris, 1995); Renata Ago. \"Hegemony over the social scene and Zealous Popes (1676- 1700)\" in G. Signorotto and M. A. Visceglia. Court Politics in Papal Rome, 1492-1700. (Cambridge University Press: Cambridge, 2002)."], "546": ["Mostly Latin, some Italian."], "852": ["BOL|bRBCAG|xCIN=JKN"], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "005": ["20100816031951.0"], "505 0": ["Fol. ii: Table of contents."], "035": ["(OCoLC)656296712"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS14": {"001": ["06-B4026"], "245 10": ["[Summa de casibus conscientiae]"], "505 0": ["Fol. 1r-225v: [text] //Nam et impediunt ordinis executionem. Talia sunt tria scilicet homicidium...non tenetur ad restitutionem. Utrum liceat furari usurario ut elemosina detur, vide...Et sequitur capitulum de (?).\""], "520": ["The quality of the parchment used for this exemplar of the famous Summa de casibus conscientiae by Bartholomew of San Concordio is quite bad, which means that this manuscript was not probably intended to be a luxury copy; nevertheless, it is not a working copy either, because it does not show any marginal note: the main text is actually pretty neat. The manuscript has some loss of folios: the entire text pertaining to letters A-D is missing, as well as a portion of the entries under letter E. The manuscript is also acephalous."], "530": ["Selected digital images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=108;fullview=yes"], "100 0": ["Bartholomew,|cof San Concordio,|d1262-1347."], "852 8": ["CUL|bRBCAG|hRobbins MS 14|xCIN=JKN"], "008": ["060822q14511500fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["|3Original: |a225 leaves :|bparchment ;|c230 x 165 (160 x 110) mm bound to 240 x 170 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-22) and positive (Robbins MS 14)"], "561": ["Early provenance not known. Once in the possession of Alan G. Thomas, the manuscript was acquired for the Robbins collection in 1970."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + 225 + ix (modern paper); 1\u2078 2\u2076 3-5\u2078 6\u00b2 7-12\u2078 13\u2076\u207a\u00b9 14\u2076 15-16\u2078 17\u00b9\u2070\u207b\u00b2 18\u2078 1 folio detached 19\u00b2 20-21\u2078 22-23\u2074 24\u2076 25-30\u2078 31\u2074\u207a\u00b9 32\u00b2. Quire numbers written in red ink in the right side of the bottom margin, on verso. No contemporary foliation is provided. Catchwords in the middle of the bottom margin, on verso, framed in red ink.", "Layout: Written in 31 long lines, below top line. Very wide margins. \"Notabilia\" in the outer margins. Ruled in dry point; a double line of prickings is visible in the outer margin: this kind of double prickings is not the most common one.", "Script: Written in a tidy cursiva libraria script (\"littera bastarda\"), by at least two different contemporary hands. The first line of every chapter heading is written in a textualis formata script.", "Decoration: Large 8-line initial on fol. 53v, 138v, 164v, with pen flourishing in red and blue. Many 2 or 3-lines , with pen flourishing initials throughout the text, alternating red and blue. Alternating red and blue paragraph marks; some \"lemmata\" are underlined in red.", "Binding: Rebound in the 19th century: red grain-leather, bearing golden fillets and fleurons in the corners. Flyleaves of modern paper. Stored in a dark red box.", "Origin: Written in Northern France during the second half of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 14."], "090 8": ["Robbins MS 14"], "260": ["[Northern France,|cbetween 1451 and 1500]"], "581": ["Barholomeus de Sancto Concordio, Summa Pisana edita per reuerendum patrem fratrem Bartholomeum de Pisis almi Ordinis Predicatorum, Venetijs, per Nicolaum Girardengum de Nouis, die xij mensis Maij 1481."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS109": {"001": ["06-B4324"], "245 10": ["Summa in foro penitentiali."], "505 0": ["Fol. 1r-13r: \"[rubr.] Incipit summa in foro penitentiali valde necessaria maxime sacerdotibus super hoc noticiam non habentibus. [text] In primis debet sacerdos interrogare penitentem utrum sciat Pater Noster, Credo in Dominum et cetera...nonne lacrime viduarum ad maxillas descendunt et exclamacio earum super deducentes. [rubr.] Explicit liber iste sit tibi laus et gloria Christe. Amen.\""], "520": ["This is a very neat copy of the Summa for the use of confessors written by B\u00e9renger Fr\u00e9dol; there are no marginal additions or annotations, but several \"maniculae\" and \"Nota\" marks are visible. The scribe ascribed (or confused) this work with the Summa of St. Raymund de Penafort in the closing rubric of the third chapter, fol. 34v: \"Explicit summa Magistri Raymundi.\""], "300": ["|3Original: |a43 leaves :|bpaper ;|c210 x 145 (155 x 115) mm bound to 215 x 159 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-84) and positive (Robbins MS 109)"], "510 4": ["P. Michaud-Quantin, \"La 'Summula in foro poenitentiali' attribu\u00e9e \u00e0 B\u00e9renger Fr\u00e9dol,\" Studia Gratiana 11 (1967): 145-167."], "852 8": ["CUL|bRBCAG|hRobbins MS 109|xCIN=JKN"], "246 2": ["|iSecundo folio :|ainterrogaciones quod"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["060906q14151450it ||||||||||||00|||lat|d"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "100 1": ["Fr\u00e9dol, B\u00e9renger,|dd. 1323."], "561": ["Ownership mark on fol. 1r, in a 16th-century hand: \"Iste libellus fuit quodam domini...\", but the following portion of the page, bearing the name of the owner, was cut out. Sotheby's believes that \"the book may well have been made in the Aragonese Kingdom of Naples;\" an anonymous typewritten description of British provenance kept in file at the Robbins Collection suggests a Dominican origin in the region of Naples."], "500": ["Ms. codex.", "Title from opening rubric, fol. 1r.", "Collation: Paper, fol. ii (modern paper) + 43 + ii (modern paper); 1-2\u2078 3-4\u00b9\u2070 5\u00b9\u2070\u207b\u00b3. Catchwords in the middle of the lower margin, on verso, by the hand of the scribe and decorated with red dots. Quires numbered on verso in the right corner of the lower margin, using Roman numerals. Watermarks: a \"fleur\" close to Briquet 6383 and 6391; a \"mons\" close to Briquet 11689. Modern foliation in pencil, 20th century, in the right corner of the bottom margin, on recto.", "Layout: Written in 33 long lines. One row of prickings visible in the outer margins. Frame ruled in dry point.", "Script: Written in a textualis libraria script, by one hand, below top line.", "Decoration: Fol. 34v, a 6-line blue initial penworked in red. Many 2-line red initials. Red rubrics, red paragraph signs throughout the text; many initials in the text touched in red.", "Binding: Parchment over pasteboard. The previous binding, detached from the manuscript at the time of the acquisition, is now kept separately; it is a legal document on vellum, dated 29 April 1580, and involving one Antonio de Fraia from Pozzuoli. Various modern annotations in pencil: \"MS 43;\" \"Summa 4o;\" \"De M.\" (Sotheby's hypothesizes that the initials refer to De Marinis); several inventory numbers. Title on spine: \"Summula casuum conscienciae.\" The manuscript was restored and rebound by Linda Ogden at the Robbins Collection in August 2001: the leaves were dry-cleaned, new end papers were added, and the volume was covered with limp vellum (Ms. Ogden's full conservation treatment report on file, together with the previous binding described above, fragments of sewing and spine lining, and the photographs taken before and after the treatment.)", "Origin: Written in Italy and possibly in Tuscany or Umbria, during the first half of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 109."], "090 8": ["Robbins MS 109"], "260": ["[Tuscany?,|cbetween 1415 and 1450]"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=69;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS171": {"001": ["ocm85182494"], "260": ["[Italy,|cbetween 1725 and 1775]"], "040": ["CUL|eamremm|cCUY|dBOL"], "520": ["A collection of 4 disparate documents bound together to make a single codex. The first, second, and fourth documents have to do with the Sacred Congregation of the Council (now called the Congregation for the Clergy). The third document is a list of financial pledges made to the parish of Cireggio in Verbania to fund the building of a new chapel for the church of San Rocco (there still exists today an Oratorio di San Rocco in Crusinallo near Cireggio). On The fourth document is a printed work, not a manuscript. Each section is wrapped in a bifolium of colored paper that often contains traces of printing in mirror-image (this colored paper could have been used as blotting paper for other works or could have simply come in contact with still-wet printings). Although the print is often too faint to read, the colored bifolium separating the second and the third work contains a printed work titled \"Sacra Congregatione Concilii R.P.D Furietto\" printed in 1759 by Bernab\u00f2, the same printing house that printed the fourth work in this codex."], "300": ["54 leaves :|bpaper ;|c269 x 196 (239 x 167) mm bound to 275 x 202 mm."], "510 4": ["Phillipps, T. Cat. ms.,|c7585."], "099": ["Robbins MS 171"], "245 00": ["[Documents pertaining to the Sacred Congregation of the Council ;|bList of financial pledges to the parish of Cireggio]"], "506": ["RESTRICTED ORIGINAL:|bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once in the collection of Sir Thomas Phillipps (his no. 7585). On p. 100 there is a note saying that this document was once owned by one \"Presbyter Johannes Baptista de nobilibus Romenie (?).\""], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. 54; 1\u2078 2\u00b9\u2070 3\u00b3\u00b2 4\u2074.", "Layout: First part written in 25 long lines; second part written in 22 long lines; third part written in 26 long lines; fourth part printed in 45 lines.", "Script: Written in cursive script by at least 4 hands. Additional, later notarial signature on p. 98.", "Binding: Brown paper over stiff pasteboard. Each section is wrapped in a bifolium of colored paper that often contains traces of printing.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 171."], "035": ["(OCoLC)85182494"], "610 20": ["Verbania (Italy)"], "505 8": ["2. Fol. 9r-15r: \"[title] Sacra Congregazionis Concilii in concedendis infrascriptis facultatibus clara praxis [text] Ceteras inter materias saepe saepius resolvendas illa cum sit de missarum reductione...per praesentis innotescere volumus eique nos fausta omnia ab domino precamur.\"", "3. Fol. 20r-49v: \"[text] In nomine domini anno a nativitate eiusdem millesimo septingentesimo quadragesimo quinto...edidi et pro fide cum appositione mei soliti tabelionatus signi me subscripsi salvo\" [additional notarial subscription by one Christophorus Caccini who appears in a database of notable Verbanese citizens working in 1837] ; p. 100 \"[text] Erectio Beneficii in loco Ciretis quod possidet Presbyter Johannes Baptista de nobilibus Romenie (?).\"", "4. Fol. 51r-54v: \"[rubr.] Eminentissimi, e Reverendissimi Signori [text] Antonio Vidal, e Almeida Brasiliano umilissimo oratore delle Eccellenze vostre, col dovuto ossepuio (sic =ossequio) rappresenta, che attesta la comune costante ripugnanza de' vescovi...E ci\u00f2 lo credo certissimo per averlo inteso a moltissime persone tanto secolari, che ecclesiastiche, o Brasiliesi nativi, o che ivi si sono fermati pi\u00f9 anni. In sede etc. questo d\u00ec 23 Agosto 1760 D. Antonio da Costa Capellano di S. Antonio de Portoghesi. [rubr.] Alla Sagra Congregazione del Concilio per Antonio Vidal e Almeida Brasiliano. Ag. Memoriale col Sommario annesso. 26. Typis Bernabo 1760.\""], "852 8": ["CU-L|bRBCAG|xCIN=JKN"], "008": ["060911q17251775it 000 0 lat d"], "583": ["|zCataloged from existing description and in hand by Kathleen A. Stewart and Jennifer K. Nelson, September 2006."], "546": ["Latin and Italian."], "003": ["OCoLC"], "005": ["20080502025830.0"], "505 0": ["1. Fol. 1r-5v: \"[title] Suggerimenti che occorrono pratticarsi per l'adempimento della carica di segretario della Sacra Congregazione del Concilio [text] La sagra congregazione del concilio fu istituita ad effetto di presedere a tutto ci\u00f2 che si racchiude...diverse materie che propsono accadere.\""], "LEADER": ["00000ctm 2200000La 4500"]}, "RobbinsMS108": {"001": ["06-B3187"], "260": ["Germany,|c[between 1425 and 1475]"], "505 0": ["Fol. 1r-155v: \"[text] Iube Dompne benedicere et cetera. Utitur christianitas in officiis ecclesie mihi desiderio mihi (sic) et aliis proficientibus in eis que scripta sunt de septem sacramentis circa summula Raymundi...Quia in quibus (?) vita contemplativa ut deum congrua stat et actam ut puniam per bonam operam adimpleat et cetera [colophon] Et sic est finis Deo gracias et ista est glossa super Raymundum finita et completa sabato proxima ante dominicam Innocentium compulsu hora quinta post prandium per manus (sic) Bernhardi Soltkoctan (?) et cetera.\""], "245 00": ["Glossa super Raymundum."], "520": ["The manuscript contains the complete text of an anonymous commentary on Saint Raymond of Pe\u00f1afort's Summa de iure canonico, Summa de poenitentia, and Summa de matrimonio. Marginal notes on folios following fol. 64 refer to corresponding titles in St. Raymond's Summa de poenitentia. The Summula Raymundi septem sacramenta ecclesiastica ingeniose complectens mentioned in the first paragraph on fol. 1r is an anonymous work that used to be commonly attributed to St. Raymond. The manuscript was copied by one Bernard Soltkotten (colophon on f. 155v: \"Et ista est glosa super Raymundum finita et completa...Per manus (sic) Bernhardi Soltkoctan (?) et cetera\"). Sotheby's hypothesizes that the scribe \"may have been related to the Augustinian scribe Johannes Saltkotten from the convent of B\u00f6ddeken...\" (see Colophons 11309). In any case, the scribe seems to have been made to copy this manuscript as penitence for some wrongdoing, as he states in the colophon \"ut puniam (sic) per bonam operam\" and describes his labor as \"compulsu\" (fol. 155v), although the exact words are hard to make out because of the difficulty of the script."], "300": ["|3Original: |a156 leaves :|bpaper ;|c202 x 139 (162 x 112) mm bound to 210 x 150.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-83) and positive (Robbins MS 108)"], "510 4": ["Phillipps, T. Cat. ms.|c698"], "852 8": ["CUL|bRBCAG|hRobbins MS 108|xCIN=JKN"], "008": ["060711q14251475gw ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio:|aQuarta nota quod omnes"], "581": ["Sotheby's, Western Manuscripts and Miniatures, London, 26 November 1985, no. 103. See also Catalogues of Manuscripts and Early Printed Books Sold by Leander van Ess to Sir Thomas Phillips, Bart. (New York, NY: Friends of the Burke Library of Union Theological Seminary in the City of New York, 1993; published on microfiche from originals in the Bodleian Library, Oxford). St. Raymundus de Penaforte, Summula Raymundi: Septem sacramenta ecclesiastica ingeniose complectens commentariis ac succulentis glossis scientifici viri magistri Joannis Chappuis explanata atque enucleata (Parisiis: Ex officina Thielmanni Keruer, Anno Salutis .MCCCCCXVI. Die XXIII. mensis Decembris; and other editions)."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson and Silvia Donghi, July 2006."], "561": ["The manuscript was once no. 314 in the catalogue of the collection of Leander van Ess (1772-1847), who sold it with other manuscripts to Sir Thomas Phillipps in 1823 (\"Phillipps MS 698\" on fol. 1r). It was then sold by Sotheby's on 9 June 1910 as lot 687; sold again by Hodgson on 12 December 1957 as lot 527 (see Sotheby's, Western Manuscripts, below). Fol. ir reads \"15th Century German MS\" in pencil in a late 19th-early 20th-century hand, erased but still legible; two numbers in pencil on front pastedown: \"237\" and \"1691.\" Correspondence regarding the manuscript kept separately in a file at the Robbins Collection."], "500": ["Ms. codex.", "Title from colophon (fol. 155v).", "Collation: Paper (watermark appears to depict a t\u00eate de boeuf), fol. ii (modern paper) + 156 (original foliation by scribe; foliation on fol. 1-10 has been written over with pencil) + ii (modern paper) ; 1\u00b9\u00b2 2-3\u00b9\u2076 4-10\u00b9\u00b2.", "Layout: Written in 2 columns of 37 lines. Frame-ruled in ink.", "Script: Written in a gothic libraria script by one hand; section headings written in a gothic textualis script.", "Decoration: Paragraph marks in red; section headings underlined in red; chapter initials touched in red.", "Binding: Modern brown pigskin by J. P. Bray & Son, Cambridge (binder's mark on back of front cover). A fragment of the medieval (original?) binding, in very good condition, on front pastedown, includes the title \"Summula Raymundi\"; also attached to front pastedown is a tear- shaped fragment (from an earlier binding?) with the drawing of a putto holding reins and wearing a hat (that looks like the top of a pumpkin or a tomato). Four raised bands on spine. Title on spine reads \"Glossa super Raymundum\" in gilt letters; edges colored green.", "Written in Germany by one Bernhardus Soltkoctan (?), mid 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 108."], "700 1": ["Ess, Leander van,|d1772-1847.|4asn|4fmo|5CUL.", "Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 108"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=68;fullview=yes"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS95": {"001": ["ocn664597218"], "260": ["Italy,|c1482."], "040": ["BOL|eamremm|cBOL"], "520": ["Text is incomplete; an examination of the index of witnesses appearing on fol. 1r shows that the original manuscript was comprised of at least 93 folios containing depositions of twenty six witnesses. Marginal notes and digits in several different hands, all possibly contemporary with the writing of the manuscript. The examination took place in Modena in 1482 (fol. 1r-v) but the scribe, the notary Franciscus Curionus, was a citizen of Ferrara, and so were several other lawyers and notaries who were present at the examination and enumerated in the text proper. Fols. i-ii were added after the text was completed and are of a different type of paper; they have suffered worse damage (including water damage) than the rest of the preserved manuscript and are now kept in plastic slips."], "300": ["|3Original:|a50 leaves :|bpaper ;|c325 x 225 (250x110) mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-78) and positive (Robbins MS 95)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=59;fullview=yes"], "008": ["100920s1482 it 000 0 lat d"], "099": ["Robbins MS 95"], "003": ["OCoLC"], "245 00": ["[Transcript of the examination of witnesses in the trial of Lady Belina de Fontana]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Single quire of 25 nested bifolia sewn together with string.", "Layout: Written in 30 long lines.", "Script: Written in a gothic, semitextualis script by one hand.", "Binding: Unbound; stored in manuscript box.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 95."], "583": ["|zCataloged from existing description and in hand by Alexandre M. Roberts, September 2010."], "005": ["20100920023649.0"], "505 0": ["Fol. 1r: Index of witnesses -- 1r-50v: \"[text] Jesus. Testes producti et examinati pro parte nobilis mulieris domine Beline uxoris quondam comendibilis viri Danielis de Fontana...et mortis ex quibus dictus testis a dicto tempore et citra veram cognitionem et notitum habuit per frequentissimam conuersationem.\""], "035": ["(OCoLC)664597218"], "546": ["Mostly Latin, some Italian phrases."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS43": {"001": ["06-B4241"], "245 10": ["Expositio regulae beati Augustini."], "520": ["The version of the Regula is that labelled \"praeceptum\" in Verheijen's critical edition, which begins \"Haec sunt quae ut observetis\" and ends \"in temptationem non inducatur.\" It is also known as the \"Regula Tertia\". The consuetudines of Augustinian houses vary enormously, and could be very summary. Regular canons were left largely to their own devices, and thus while the customs prescribed in fol. 6v- 18r of this manuscript have affinities and overlaps with various printed versions, this does not bear an especially close relationship to any that have been located. Lietbertus was abbot of St. Ruf 1100-c.1111. This version of the \"Epistula\" is more complete than the text printed in the Patrologia Latina, which is missing 18 words from (717.13) \"deduxit\" to (717.14) \"sive regula\". The version in MS 43 does not contain the final sentence of the printed edition: \"tria his verbis maxime commendantur, id est ordo, vita et habitus\". Fol. 57-59 are missing, so the text of the \"Expositio regulae\" of Hugo de S. Victore is missing some parts.."], "LEADER": ["00000ctm 2200000 a 4500"], "260": ["[Italy?,|cbetween 1275 and 1300]"], "246 2": ["|iSecundo folio: |a[ver]setur in corde"], "581": ["Jacques-Paul Migne, Patrologiae cursus completus Series Latina, 221 vols. (Paris: Garnier, 1878-1904), 157:715-9.", "Migne, Patrologia Latina, 176: 881-924.", "Stephanus Weinfurter, Consuetudines Canonicorum Regularium Springirsbacenses-Rodenses, Corpus Christianorum Continuatio Mediaevalis [henceforth CCCM] 48 (Turnholti: Typographi Brepols Editores Pontificii, 1978)", "Lucas Jocqu\u00e9 and Ludovicus Milis, Liber Ordinis Sancti Victoris Parisensis, CCCM61 (Turnholti: Typographi Brepols Editores Pontificii, 1984)", "Regula et constitutiones canonicorum regularium congregationis S. Salvatoris, Ordinis Sancti Augustini (Romae: Apud Paulum Bladum, Impressorem Cameralem, 1592)", "Luc Verheijen, La R\u00e8gle de Saint Augustin (Paris: Etudes Augustiniennes, 1967)"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["In the inside front cover, a 20th century hand writes catalogue numbers: \"CB 92915\" and \"8\u2070 37243 S I 3\". A big capital \"L\" is written in blue crayon on the inside front cover; \"S. Augustinus\" is written in pencil at the top of fol. 1r. There is a marginal notation \"Clothes\" on fol. 14r, by a 20th century hand, in pencil. The manuscript was in the collection of Acton Griscom of High Point, New Jersey, in 1937 (G. 10), and that of Lathrop C. Harper in 1974."], "500": ["Ms. codex.", "Title from opening rubric, fol. 21r.", "Collation: Parchment, fol. 1 (modern paper) + 62 + i (modern paper); 1-3\u00b9\u2070 4\u2078 5\u00b9\u2070 6\u2078 7\u2076\u207b\u00b3. Catchwords in the middle of the bottom margins, on verso, by the hand of the scribe. No quire numbers and no contemporary foliation is provided.", "Layout: Written in 27 long lines, above top line. Frame ruled in dry point.", "Script: Written in a textualis libraria script, apparently by one hand.", "Decoration: Alternating red and blue initials, mostly on two or three lines, sometimes penworked. Red rubrics.", "Binding: Bound with beige paper over pasteboards. On the spine, a bookplate reads: \"37243 I\u00b3.\"", "Origin: Possibly written in Italy during the last quarter of the 13th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 43."], "300": ["|3Original: |a62 leaves :|bparchment ;|c145 x 100 (100 x 65) mm bound to 150 x 110 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 00-43) and positive (Robbins MS 43)"], "505 8": ["Fol. 6v-18r: \"[Consuetudines monachorum Augustinianorum]. Quia infirmorum fratrum maior instat necessitas ut pervigili cura visitentur et provvida dispensatione circa eos in cunctis agatur...damus tibi societatem nostram et participationem oracionum nostrarum, et beneficium elimosinarum nostrarum. Deo gracias.\"", "Fol. 18v-20r: \"[Lietbertus of St. Ruf, Epistola ad Ogerium praepositum congregationis Ferranice]. Ferranice congregationis venerabili proposito sanctoque eius conventui et omnibus in canonico ordine...vos estis lux mundi, vos estis sal terre, luceat ergo lux vestra...\"", "Fol. 21r-62r: \"[Hugo de S. Victore, Expositio in Regulam beati Augustini]. Hec precepta que subscripta sunt, ideo regula appellantur quia videlicet in eis nobis recte vivendi norma exprimitur...orans ut et debitum ei dimittatur et in temptationem non inducatur. Amen. [rubr.] Explicit expositio Regule beati Augustini.\""], "100 0": ["Hugh,|cof Saint-Victor,|d1096?-1141."], "852 8": ["CUL|bRBCAG|hRobbins MS 43|xCIN=JKN"], "700 0": ["Augustine,|cSaint, Bishop of Hippo.", "Lietbertus,|cde Sancto Rufo."], "008": ["060901q12751300it ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "546": ["Latin."], "700 1": ["Lathrop C. Harper, Inc.|4asn|4fmo|5CUL.", "Griscom, Acton, 1891-|4asn|4fmo|5CUL."], "505 0": ["Fol. 1r-6v: \"[Augustinus Hipponensis, Regula] Hec sunt que ut observetis precipimus in monasterio constituti. Primo propter quod in unum estis conggregati...ut et ei debitum dimittatur et in temptationem ne inducatur. Amen. [rubr.] Explicit regula sancti Augustini episcopi.\""], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=29;fullview=yes"], "090 8": ["Robbins MS 43"]}, "RobbinsMS9": {"001": ["05-B14647"], "245 10": ["Summa de casibus poenitentiae;|bSumma de matrimonio."], "505 0": ["Fol. 2r-261v: Summa de casibus poenitentiae: fol. 2r-2v: \"[prologue] Quoniam ut ait Ieronimus secunda post naufragium tabula est culpam simpliciter confiteri...a me preter propositum inserta cogitans caritate fraterna corrigas et emendes\"; fol. 2v: [table of contents]; fol. 3r-261v: \"[text] Quoniam inter crimina ecclesiastica symoniaca heresis optinet primum locum...mereamur audire in die domini dulcem et ineffabilem iocunditatis vocem illam venite benedicti precipite regnum amen [rubr.] Explicit summa de casibus.\""], "505 8": ["Fol. 262r-295v: Summa de matrimonio: fol. 262r: \"[rubr.] Incipit de matrimonio [prologue] Quoniam frequenter in foro provinciali dubitationes circa matrimonium immo et interdum qua perplexitates occurunt...ponendo rubricas in locis debitis et dubitationes diversas ad rubricas singulas pertinentes [rubr.] De sponsalibus [text] Quoniam matrimonium sponsalia precedere consueverunt ideo primo loco de sponsalibus est agendum...que corrigenda vidit et addenda non invidienti animo sed benigno corrigat et emendet [crossed out: Explicit summa de matrimonio] Expliciunt summa de casibus et summa de matrimonio.\""], "520": ["Raymond of Pe\u00f1aforte's Summa de poenitentia and Summa de matrimonio. On ther verso of fol. ii reads: \"Summa de casibus\" in a fourteenth-century hand; \"Summa de casibus conscientiae\" and \"13e s. comp.[os\u00e9] par R. des fr\u00e8res V[...]rs\" in an eighteenth- or nineteenth-century hand."], "530": ["Selected digital images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=105;fullview=yes"], "510 4": ["Kuttner et al., Catalogue of Canon and Roman Law Manuscripts,|c2:1, 3-6."], "100 0": ["Raymond,|cof Pe\u00f1afort, Saint,|d1175?-1275."], "852 8": ["CUL|bRBCAG|hRobbins MS 9|xCIN=JKN"], "260": ["[France, |cca. 1290]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "008": ["051118s1290 fr ||||||||||||00|||lat|d"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, December 2005."], "300": ["|3Original:|a295 leaves :|bparchment ;|c155 x 110 (95 x 58) mm bound to 158 x 115 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 99-18) and positive (Robbins MS 9)"], "561": ["The manuscript once belonged into the library of Count Chandon de Briailles, where it was catalogued as MS 30 (book plate on f. iir). It was purchased at some point by Lloyd M. Robbins and was part of the original bequest that created the Robbins Collection."], "500": ["Ms. codex.", "Title from opening and closing rubrics (fol. 261v, 262r & 295v).", "Collation: Parchment, fol. ii (2nd flyleaf incorrectly numbered as fol. 1) + 295 + i (incorrecly numbered as 297); 1\u00b9\u00b0 2-6\u00b9\u00b2 7 \u00b9\u00b2\u207d\u207b\u00b9\u207e 8-24\u00b9\u00b2 25\u00b9\u00b0; catchwords sometimes visible, often cropped; roman numeral signatures added in pencil in a modern hand.", "Layout: Written in 27 long lines. Ruled in lead; some prickings visible along fore-edge, most cropped.", "Script: Written in a Gothic script by one hand.", "Decoration: Red, blue, and green initials; paragraph marks in red and blue; titles rubricated; line fillers on fol. 2r, 134r, and 262r.", "Binding: Stamped leather over wooden boards. Front cover damaged where clasp (now lacking) was torn off; nail holes for clasp in back (now lacking).", "Accompanying materials: Modern, round tag on string from spine bearing two different call numbers: \"I 46 R273 sum,\" and BV761 .A8 .R21.\"", "Origin: Manuscript was probably copied, and certainly bound, in lower Normandy. Fol i, used as a front flyleaf in the present binding, contains, on its verso, samples of episcopal letters of dispensation and benefit for the dioceses of Bayeux: \"Tenor litterarum que episcopus dispensat ex residentia\"; \"item alia\"; \"Tenor que episcopus confert alicui beneficium.\" According to Marie- Ther\u00e8se D'Alverny, who perused this manuscript in 1981 at the Robbins Collection, the five sexterniones, marked in pencil, are presumably from southern France, as the hue of red is lighter than that from Paris; the script, however, is not south-French.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 9."], "LEADER": ["00000ctm 2200000 a 4500"], "581": ["For manuscripts including the texts of the Summae in U.S. collections, see de Ricci and Wilson, Census 2: 1206 (Buffalo, NY, the library of the Buffalo Historical Society) and 2154 (Providence, R.I., the library of Howard S. Preston); and Faye and Bond, Supplement to the Census, 53 (Yale University Library), 79 (the library of T. E. Marston, CT), 106 (Washington, DC, Catholic University), 215 (Boston Public Library), and 402 (New York, the library of Phyllis W. and Howard L. Goodhart). See also Raymundus de Penaforte, Summa de paenitentia S. Raimundus de Pennaforte, ed. Xaverio and Aloisio Diez, Universa bibliotheca iuris 1/C (Rome: Commentarium pro religiosis, 1976)."], "090 8": ["Robbins MS 9"]}, "RobbinsMS251": {"001": ["06-B3677"], "260": ["Spain,|c18--."], "505 0": ["Pp. 1-339: \"[title] Appuntes sobre las leyes del libro primero de la Novissima recopilacion [text] Libro primero Titolo primero De los contractos y obligaciones en general...Ya hemos dicho que el [----] no debe ser ambicioso en reclamar estos derechos mientran haya parientes\" ; p. 340: blank ; pp. 341-342: \"[text] Indice de los titulos que contiene este tomo de apuntes \u00e0 las leyes del libro primero della Novissima recopilacion.\""], "520": ["Manuscript contains the notes of a legal scholar on the first book of the Novissima recopilacion (presumably that of Spain in 1805)."], "852 8": ["CUL|bRBCAG|hRobbins MS 251|xCIN=JKN"], "008": ["060802s18uu sp ||||||||||||00|||spa|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Apuntes sobre las leyes del libro [primero] de la Novissima recopilacion."], "546": ["Spanish."], "300": ["342 pages :|bpaper ;|c207 x 140 (181 x 120) mm bound to 214 x 141 mm."], "561": ["On first page is an oval-shaped ownership stamp (20 x 17 mm) displaying the letter \"N\" in a black background. The front and back pastedown both contain the label of the Libreria Puvil in Barcelona, Spain. On verso of front flyleaf is the numbe \"18H.\""], "500": ["Ms. codex.", "Title from title page (p.1).", "Collation: Paper (watermark has word \"BILBAO\"), pp. ii + 342 + iii; collation indiscernable due to tightness of binding.", "Layout: Written in 21 long lines; running titles across top of page; frame ruled in dry point. Table of contents (pp. 341-342) has double verticle bounding lines at fore edge, ruled in ink.", "Script: Written in a neat cursive script by one hand.", "Decoration: Section headings in 2-line bold letters.", "19th century brown leather over pasteboard; gold-tooling on spine with decorative bands creating 5 compartments, four containing a flower and one displaying the title. Marbled flyleaf and pastedown at front and back.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 251."], "583": ["|zCataloged in hand by Jennifer K. Nelson, August 2006."], "090 8": ["Robbins MS 251"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS69": {"001": ["06-B4371"], "245 10": ["[Institutiones cum glossa Iohannis Andreae]"], "505 0": ["Fol. 1r-203r: \"[rubr.] In nomine Domini nostri Iesu Christi imperator Cesar Flavius Iustinianus Alamannicus Gothicus Francus Germanicus...[text] Imperatoriam maiestatem non solum armis decoratam...titulum de appellationibus qui sequitur, et cetera. Deo gracias, 1468.\""], "505 8": ["Fol. 203v: \"[Notae de senatu] Senatus consultum est quod senatus iubet atque constituit leges...item senatus consulto Velleyano mulieribus...\" Fol. 204r-v is blank.", "Fol. 205r-236v: \"[Gerardus de Rivo, Defensorium iuris] Bone rei dare consilium est...si autem lis non fuit contra perit [..]. Deo Gracias.\" Fol. 237r-241v are blank.", "Fol. 242r-253v: \"[Giovanni d'Andrea, Apparatus in Librum sextum Decretalium] Quia preposterus est ordo...contradicit hec per concilium manicheis.\" Fol. 254r -v is blank."], "520": ["This manuscript contains three important works related to canon and civil law: the \"Institutiones\" by Emperor Justinian with its gloss by Giovanni d'Andrea, the \"apparatus\" to the Liber Sextus of pope Boniface VIII writtten by Giovanni d'Andrea, and the \"Defensor iuris\" by a Cistercian monk named Gerardus Monachus, also known as Gerardus de Rivo. Pastedown includes the fragmentary text of a notarial instrument from the diocese of Halberstadt, Germany. The manuscript was copied by at least three different hands but the watermark is the same in the three sections, which means that the manuscript was conceived from the beginning as a whole work."], "100 0": ["Justinian|bI,|cEmperor of the East,|d483?-565."], "852 8": ["CUL|bRBCAG|hRobbins MS 69|xCIN=JKN"], "700 0": ["Giovanni d'Andrea,|dapproximately 1270-1348.", "Gerardus,|cde Rivo."], "260": ["[Germany],|c1468."], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio :|anam per hoc quod ipse"], "581": ["Corpus iuris civilis, 3 vols. (Berolini: apud Weidmannos, 1954), 1: Institutiones, recognovit P. Krueger."], "008": ["060907s1468 gw ||||||||||||00|||lat|d"], "546": ["Latin."], "300": ["|3Original: |a254 leaves :|bpaper ;|c310 x 215 (225 x 1250) mm bound to 325 x 220 mm.", "|3Copy: |a1 microfilm reel :|bpositive (Robbins MS 69)"], "561": ["The manuscript once belonged to one Martinus Niitel (contemporary ex libris in red ink on end pastedown: \"Martinus Niitel, baccalarius in utroque jure, est possessor hujus [...]).\" On the inside back cover, there is a note concerning a price: \"Nota LXXXI aurei faciunt libr[arum] VIII auri ut iusti de [...]\", written by a 15th century hand. The book was at one time in the library of Leander van Esp (his MS 192 probably inventoried in 1823), then it became part of the collection assembled by Sir Thomas Phillipps (\"Phillipps MS 576\" on fol. iir; his stamp with lion rampant on fol. iv); thereafter it successively passed into the hands of R. S. Saxton."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper (watermarks: a 'mons' very close to Briquet 11799, 11800 and 11804), fol. ii (modern paper) + 254; 1-5\u00b9\u00b2 6\u00b9\u00b2\u207b\u00b2\u207b\u00b9 7-17\u00b9\u00b2 18\u00b9\u00b2\u207a\u00b9 19\u00b9\u00b2 20-21\u00b9\u2074. Ruled in dry point. Catchwords in the right corner of the bottom margin, on verso, by the hand of the scribe. No contemporary foliation and no quire signature are provided.", "Layout: Fol. 1r-203v, written in up to 51 long lines; fol. 205r-236r, written in 48 long lines; fol. 242r-253v, written in up to 56 long lines.", "Script: Written in cursiva libraria script, below top line, by at least three different hands.", "Decoration: fol. 1r, a 6-line red penworked initial. Red and blue Lombard initials mostly on 2 lines, very rarely penworked. Red rubrics, red paragraph signs and initials touched in red throughout the text. Red running titles.", "Binding: Blind stamped dark calf over oak boards, 15th century, rebacked; stamps and fillets. Red, yellow, and green headbands. Metal corner pieces; two clasps, missing; some worm holes; hole in the outer edge of back cover; holes in the center of both front and back cover; evidence of bosses or plates. Paper flyleaves. Title on spine: \"Justinian Institutes.\"", "Origin: Fol. 1r-203v, written in Germany in 1468 (the date is stated in the colophon).", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 69."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "LEADER": ["00000ctm 2200000 a 4500"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=40;fullview=yes"], "090 8": ["Robbins MS 69"]}, "RobbinsMS87": {"001": ["ocn606023941"], "260": ["Italy,|c[between 1475 and 1550]"], "040": ["BOL|eamremm|cBOL"], "520": ["Statements verifying the accuracy of the copies of papal privileges are signed by Leonardo Tassara, Apostolic and Imperial notary (fol. 46v), and by Niccol\u0300\u00f2 Vitali[ani], notary of the Paduan chancery (fol. 47r). The former statement includes Tassara's notarial sign; the latter is dated 1540 and includes a seal."], "510 4": ["Phillips, T. Cat ms.|c26122."], "099": ["Robbins MS 87"], "245 00": ["[Collection of privileges and papal letters]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once owned by the Convent of San Pietro in Oliveto, Brescia, as indicated by note (in a later hand than the manuscript) on fol. iv: \"In del [sic] convento di S. Piero in Oliveto\"; a note on fol. ir, also in a later hand, reads \"manoscritto dei primi bei caratteri.\" There is an unidentified call number \"643\" on a round label on the spine. Manuscript was once in the collection of Sir Thomas Phillipps (his no. 26122)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, iii (paper) +58 + i (paper); 1-5\u00b9\u2070 6\u2078.", "Layout: Fol. 1r-49v written in 24 long lines, below top line; ruled in ink. Fol. 51r-56v writtin in 25 long lines, below top line; horizontal ruling in ink, vertical bounding lines in lead.", "Script: Written in at least five hands: humanistic script (fol. 1r-46r, 47v-49v); two different notarial hands (fol. 46v and 47r); cursiva libraria script (fol. 51r-56v).", "Binding: Dark brown leather over pasteboard. Front cover is decorated with the image of a crucifix, back cover with the image of the Virgin and Child. Originally two fore edge clasps, one now lacking.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 87."], "035": ["(OCoLC)606023941"], "505 0": ["Fol. 1r-35v: Privilegia congregationis Sancte Justine ordinis Sancti Benedicti \"[text] Incipiunt capitula privilegii Quarti...Datum Romae apud Sanctum Petrum Anno incarnationis dominice M. D. i. KL aprilis Pontificatus nostri anno nono. Gratis de mandato santissimi Domini N[ostr]ri Papae / Hadrianus / .P. Tuba / Franciscus de Turre Cremata / A Tergo R[---]ta: apud Hadrianum.\""], "505 8": ["Fol. 36r-40v: ruled but blank.", "Fol. 41r-46r: Petrus Paulus Parisius, Inspeximus of apostolic letters by Paul III, 27 March 1538 \"[text] [I]n nomine sancte et individue trinitatis Patris et filii et spiritus sancti Amen. Noverint universi hoc presens publicum transumpti instrumentum inspecturi visuri lecturi pariter et audituri...signavi in omnium fidem robur et testimonium premissorum rogatus.\"", "Fol. 46v-47r: Notarial statements verifying the accuracy of the copies of papal privileges.", "Fol. 47v-49v: Pius V, Motus proprius Pii V de precedentia \"[text] [P]ius Papa V motu proprio. Cum alias no postquam dilecti filii Rector Generalis et Can[oni]ci Cong[regation]is S[an]cti Georgii in Alga...Collationati p[er] me Paulum Magium regri mag[ist]rum.\"", "Fol. 50rv: ruled but blank.", "Fol. 51r-56v: Gregorius XII, Bulla Illis que pro divini cultus, Rome, 27 June 1407 \"[text] Gregorius Eps. servus servorum dei. Ad futuram rei moriam. Illis que pro divum cultus augmento auctoritate...Dat[um] Rome apud Sanctum petrum. d. kl Iulii. Pontificatus m[e]i Anno Primo.\""], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5BOL."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=54;fullview=yes"], "008": ["100409q14751550it 000 0 lat d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Alexandre Roberts, April 2010."], "546": ["Latin and Italian."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100409032852.0"], "300": ["|3Original:|a58 leaves :|bparchment ;|c240 x 180 (180 x 125) mm bound to 250 x 185 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-70) and positive (Robbins MS 87)"], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS13": {"001": ["06-B838"], "260": ["Toulouse, |c[between 1575 and 1599]"], "505 0": ["|gFol. 1r-77r. |tAnnotationes ad quatuor libros institutum / Gabriel Dulaur -- |gFol. 81r-101v. |t[Annotationes] ad cap[itulum] Consultationibus ex. de iure patronatus / Fran\u00e7ois de Lagarde -- |gFol. 103r-130v. |t[Annotationes] ad titulum De inofficioso testamento / Martin Rossel -- |gFol. 136r-168v. |t[Annotationes] ad titulum De rebus creditis / Martin Rossel -- |gFol. 172r-205v. |tIn caput primum De homicidio Annotationes / Pierre Gr\u00e9goire."], "520": ["Annotationes from the mid to late 16th century by 4 canon law professors, at least 3 of whom taught at the University of Toulouse: Martin Rossel, Pierre Gr\u00e9goire, Fran\u00e7ois de Lagarde. Extensive marginal notes on fol. 136- 205. Fol. 77v-80v, 102rv, 131r-135v, 169r-171v blank."], "530": ["Selected images available in Digital Scriptorium."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=107;fullview=yes"], "852 8": ["CUL|bRBCAG|hRobbins MS 13|xCIN=JKN"], "300": ["|3Original:|a205 leaves :|bpaper ;|c263 x 195 (208 x 129) mm bound to 266 x 205 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 99-21) and positive (Robbins MS 13)"], "008": ["060224q15751599fr ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "245 00": ["Annotationes ad quatuor libros institutionum iuris pontifici ;|b[Annotationes] ad cap[itulum] Consulationibus ex de iure patronatus ; [Annotationes] ad titulum De inofficioso testamento ; [Annotationes] ad titulum De rebus creditis ; In caput primum De homicidio."], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, March 2006."], "561": ["Once in the library of Emmanuel Moret."], "500": ["Ms. codex.", "Title from section headings.", "Collation: Paper (watermark similar to Briquet \"Fleur,\" 6580), fol. i + 205; 1\u00b9\u00b2 2\u00b9\u2070 3\u00b9\u2074 4\u00b9\u2070 5\u00b9\u00b2 6\u00b9\u2070 7\u00b9\u00b2 8\u00b9\u2070\u207a\u00b9 9\u2078\u207a\u00b2 10\u00b9\u00b2\u207a\u00b9 11\u00b9\u00b2 12\u00b9\u2070 13-15\u00b9\u00b2 16-17\u2078 18-19\u00b9\u2070.", "Layout: 34 long lines; ruled in dry point around writing space only.", "Script: Written in a cursive script by one hand.", "Binding: Bound in parchment; front cover detached. Front fly leaf and front and back pastedowns torn; endbands sewn in.", "Origin: Manuscript was probably copied in Toulouse in the latter part of the 16th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 13.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), gBX1935 L377 15--."], "700 1": ["Dulaur, Gabriel.", "Lagarde, Fran\u00e7ois de.", "Rossel, Martin.", "Gr\u00e9goire, Pierre,|d1540-1617."], "090 8": ["Robbins MS 13"], "581": ["Pierre Gregoire, Opera omnia ad ius pontificium spectanta ... (Lugduni: sumptibus I. Pillehotte, 1612)."], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS45": {"001": ["ocn251595892"], "260": ["England, [ca. 1600]"], "040": ["BOL|eamremm|cBOL"], "520": ["Essays on papal elections and the College of Cardinals, in particular the election of Adrian VI (9 January 1522 to 14 September 1523) and Gregory XIV (5 December 1590 to 15 /16 October 1591) and a description of the death of the latter. A list of cardinals 1590-91 is found at the end of the text."], "300": ["|3Original:|a158 leaves :|bpaper ;|c168 x 101 (135 x 82) mm bound to 175 x 112 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 00-46) and positive (Robbins MS 45)"], "099": ["Robbins MS 45"], "245 00": ["[Essays on papal elections and the College of Cardinals, 1521-1591]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Paper, fol. 158 (foliation starts at first page of text (i.e. on fol. 6); fols. containing text are numbered 1-118 but there are 6 blank fols. before text begins, and 34 blank fols. after end of text); collation indiscernable due to tightness of binding.", "Layout: Written in 27-32 long lines. Fol. 1r-64v frame ruled in brown ink; fol. 65r-80v frame ruled in red ink. Catchwords at the end of each page.", "Script: Written in a neat script, possibly by three hands: the first hand has copied article 1; the second parts of article 2; the remaining text might have been copied by a third scribe or by the second using a different pen, as the ductus of the characters is slightly different from the first half of article 2.", "Binding: Brown leather binding over pasteboard. Small, gilt diamond pattern on fore edge of binding; front and back boards decorated with tooled border of three lines. Title on spine: \"Old Manuscript,\" in golden letters on red label.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 45."], "600 00": ["Adrian|bVI,|cPope,|d1459-1523.", "Gregory|bXIV,|cPope,|d1535-1591."], "035": ["(OCoLC)251595892"], "505 8": ["Fol. 37r-110v: \"The Conclave of Pope Gregory the 14th wherin are recompted distinctly & orderly all the actions that happened in the same anno Domini 1591. A vertuous desire, in truth, and a lawdable custome it is...but that in this issue and successe politique discourse and civile prudence had alsoe their stroake [?] Finis.\"", "Fol. 113r-115r: \"The Manner of the carriage of Pope Gregorie 14th on his death bedd of which there were divers coppies inclosed in the former letters intercepted. Our Lord the Pope, after hee had tertaine daies bene greatly troubled with his infirmities, being nowe advertised by Father Toledo of the imminent dainger of his life...And soe all of them having reteined the Benediction of his Holynesse departed.\"", "Fol. 116r-117v: \"A list of the Cardinalls of Rome taken in October Anno 1590.\"", "Fol. 118rv: \"Cardinalls 1591 viz. Anno 1591.\""], "650 0": ["Popes|xElection."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=31;fullview=yes"], "008": ["080916s1600 enk 000 0 eng d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, September 2008."], "546": ["English."], "003": ["OCoLC"], "852": ["CU-L|bRBCAG|xCIN=JKN"], "005": ["20080916042615.0"], "505 0": ["Fol. 1r-36r: \"[Election of Adrian VI] After the death of Leo the tenth who departed this life the first of December 1521, those Princes of Italy who had formerly bene streightned, and kept under by his power...the Cardinalls promising him that at his coming to Rome hee would make addition to this beginning and hoped in tyme to give him full contentment in this and all other his demannds [sic].\""], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS270": {"001": ["06-B3712"], "245 10": ["[Digestum novum cum Glossa ordinaria Accursii]"], "505 0": ["Fol. iiv: \"[table of contents] Domini Iustiniani sacratissimi principis ...De operis novi nuntiatione...De diversis regulis iuris antiquis\"; fol.1r-271v: \"[rubric] Domini Iustiniani sacratissimi principis perpetui augusti iuris et nucleati ex omni veteri iure collecti Digestorum sive Pandectarum libri xxxviii explicit. Incipit xxxviiii de operis novi nuntiatione. [text] Ulpianus. Hoc edicto permittat ut sive iure sive iniuria...[gloss] De operis novi nunciatione. Sed cum septem...[text] Servus rei publice cause abesse non potest. [gloss] ...pretoris barbar ius."], "520": ["This manuscript appears to be a study copy for use by a law professor, since it is full of marginal and interlinear notes, in the form of comments both on the main text of the Digestum and on the Accursian gloss. The flyleaves contain some unidentified texts, barely legible, but they seem like notes and drafts taken from some part of the main text, and put at the beginning of the manuscript as a \"memorandum\" for the professor. The high level of the illuminations, nevertheless, suggests that this manuscript was created to hold an important place in the textual tradition and in the University Library as well."], "700 3": ["De Saporta family.|4asn|4fmo|5CUL."], "852 8": ["CUL|bRBCAG|hRobbins MS 270|xCIN=JKN"], "561": ["On inside front cover, three verses on hexameters: \"Iesus Maria. Religio et pietas omnium (?) comitantur in astris. Post obitum bene facta manet eternaque virtutis. Non metuit Stigiis ne rapiatur aquis.\" On inside front cover, a 18th century bookplate with the coat of arms of the De Saporta family with the motto \"Fortis custodia\" written in a scroll; under the coat of arms there are the names \"De Saporta. Lordonn\u00e9 F. Adol\u00e9\". In the manuscript were also found: a business card belonging to \"Charles Hanoteau, agreg\u00e9 de la Facult\u00e9 de Droit, Lyon, Rue de Castries 13\"; an invitation to lunch from Gabriel Alapetite prefect of Rhone and his wife to Monsieur Caillemer, and dated \"dimanche 16 Novembre \u00e0 midi\"; a letter with his stamp (\"Republique Francaise\"), containing notes taken from the manuscript by a 19th century hand, in Latin: \"Numquid res et pena possint peti? Distingue...Si de pena legali, pena legalis habetur...Si queritur de pena conventionali, aut queritur de pena que succedit loco contemptus...Ea littera ista determinatur...quod sic per litteram istam\". The letter is addressed to \"Monsieur Caillemer Doyen de la Facult\u00e9 de Droit\", but the date on the stamp is not legible."], "700 0": ["Accursius,|cglossator,|dca. 1182-ca. 1260."], "008": ["060804q12501300it ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged and in hand by Silvia Donghi, August 2006."], "300": ["274 leaves :|bparchment ;|c420 x 260 (230 x 130) mm bound to 440 x 250 mm."], "100 0": ["Justinian|bI,|cEmperor of the East,|d483?-565."], "500": ["Ms. codex.", "Title from opening rubric.", "Collation: parchment, fol. ii (medieval parchment) + 271 + i (medieval parchment); most likely in quires of 8 folios (unable to confirm due to fragility of the codex). Catchword in the bottom margin on the right, on verso. The manuscript appears to be written using the pecia system: the length of each pecia should have been some 4-5 folios. The pecia marks are still legible in the outer margins of fol. 57r, 61r, 228r.", "Layout: Fol. 1r-263v: written in two columns, 47 lines for each column; fol. 264r-271v: written in 47 long lines. Wide margins, the bottom margin is the widest. Marginal gloss on two columns of up to 105 lines. Many interlinear glosses. Pricking in the outer and the bottom margin. Ruled in dry point.", "Script: The main text is written in a textualis libraria Bononiensis script, below top line, by one hand: the gloss is written in a textualis libraria possibly by a Southern France hand, apparently by one hand too.", "Decoration: Fol. 3r, a man (possibly Ulpianus) in red robes with a cowl, on 8 lines, holding a scroll that reads : \"Ulpianus\", written in capital and uncial white letters, on a blue and yellow background; fol. 22v, Ulpianus is sitting on his throne, in a red and pink robe, with a book in his right hand. The whole picture is framed in blue and pink. On his left side, the name \"Ulpianus\" written in capital and uncial white letters is framed in blue and pink too; fol. 71v, Ulpianus, dressed in red and pink, sitting under an arch on his throne with a book in his left hand and a pointing right finger. The background is painted in blue with white stars, resembling the sky at night. On his right side, framed in blue, there is the name \"Ulpianus\" written in white capital and uncial script; other illuminated initials that show Ulpianus in various attitudes on fol. 112r, 126r, 145r, 169v, 195r, 222r, 240r. Many \"droleries\" painted in blue and red throughout the text; many 2-line initials painted in blue, pink, red and pale yellow throughout the text (some of them are animal-shaped); fol. 86v: a capital 4-line U decorated with a human face, possibly Ulpianus. Fol. 10v, pen drawing showing a human face with a pointing finger which resembles a bunch of flowers; fol. 182v, pen drawing showing a king with a tree on his head. Blue 3-line penworked initials and red 2-line penworked initials throughout the text. Alternated red and blue paragraph signs. Red rubrics.", "Music: On inside front cover, used as pastedown, is a parchment leaf written in a cursive 15th-16th century German or Dutch hand, with musical notation on 5 lines.", "Binding: Medieval binding (possibly early 15th century): leather over wooden boards, defective spine (it is possible to see that the spine was resewn). Many pins for the clasps (lacking) still attached on the boards.", "Origin: Written in Bologna and glossed in Southern France during the second half of the 13th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 270."], "700 1": ["Alapetite,|bGabriel,|d1854-1932.|4asn.", "Hanoteau,|bCharles,|d1851-?|4asn.", "Caillemer,|bExup\u00e8re,|d1837-1913.|4asn."], "090 8": ["Robbins MS 270"], "260": ["[Bologna,|cbetween 1250 and 1300]"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS58": {"001": ["ocn505876040"], "260": ["Italy,|c[between 1650 and 1699]"], "040": ["BOL|eamremm|cBOL"], "520": ["The subject of most of the documents in this manuscript is the dispute over regalian rights in France. The first text (fol. 1r-12v) contains excerpts from a book titled Memoria Polonica by Samuel Nakiolsky, printed in Krakow, Poland, in 1634. Nakiolsky was a Doctor of Theology and a Canon Regular of the Order of the Sacred Sepulcher in Miechow (diocese of Krakow)."], "300": ["|3Original:|a233 leaves:|bpaper ;|c189 x 130 mm bound to 195 x 137 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-81) and positive (Robbins MS 58)"], "510 4": ["Phillipps, T. Cat. ms.,|c6079."], "099": ["Robbins MS 58"], "245 00": ["[Documents regarding the dispute between Innocent XI and Louis XIV over regalian rights]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "561": ["Manuscript was once part of the collection of Sir Thomas Phillips (his no. 6079)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Layout: Written in long lines, varying number of lines per page. The first text and beginning of second text (fol. 1r -18r) are enclosed in a frame ruled in pencil.", "Script: Written in at least five hands. The first text, the excerpt from Memoria Polonica, is written in by far the neatest hand.", "Bound in vellum over pasteboard.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 58."], "035": ["(OCoLC)505876040"], "650 0": ["Regalia|zFrance.", "Church and state|zFrance."], "700 1": ["Phillipps, Thomas,|cSir,|d1792-1872.|4asn|4fmo|5CUL."], "008": ["100210q16501699it 000 0 ita d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, February 2010"], "546": ["Mostly in Italian; some Latin."], "003": ["OCoLC"], "852": ["BOL|bRBCAG|xCIN=JKN"], "005": ["20100210063223.0"], "505 0": ["Fol. 1r-12v: \"Memoria Polonica, ex libro intitulato Miechovia sive Promptuarium antiquitatum monitorii miechoviensis ordinis canonicorum regularium Sanctissimi Sepulchri D. N. in Polonia...impresso Cracoviae 1634, Auctore Samuele Nakiolski\" -- Fol. 13r-23r: \"De Pugna Gigantum. Discursus Politicus\" -- 23v-41v: \"Memorie delle raggioni che hanno obligato il R\u00e8 a pigliare l'armi, e che devono persuadere tutta la Christianit\u00e0 delle sincere intentioni di S. M. per lo stabilimento della tranquillit\u00e0 publica\" -- Fol. 42r-63v: \"Responsio ad manifestum retroscriptum Gallicum\" -- Fol. 64r-65v: \"Lettera dell'Armiraglio (sic) Herbert a tutti gli officiali di marina di Sua Maiest\u00e0 Brittanica -- Fol. 65v: Prophesy in verse (vaticinum) against France (12 lines) -- Fol. 66r- 111r: \"Risposta alla lettera, o vero Manifesto del Re di Francia\" -- Fol. 112v-114r: Copy of a letter from Pope Innocent XI to Louis XIV, King of France (15 January 1649) -- Fol. 114r-117r: \"Copia di una lettera scritta da un Cattolico in Amsterdam\" (24 December 1666) -- Fol. 117v- 118r: \"Copia della lettera scritta dalla Regina d'Inghilterra al Re Christianissimo Ludovico XIV di Francia et di Navarra al suo arrivo in Francia\" -- Fol. 118r-120v: Estratto della sesta lettera pastorale del Ministro Sutieu. Avviso intorno all'emergenze del tempo\" - - Fol. 120v-143v: \" L'ingiuste procedure della Maest\u00e0 di Luigi XIV Re di Francia e di Navarra\" -- Fol. 144r-145r: Copy of a letter from Pope Innocent XI to Louis XIV, King of France (15 January 1669) -- Fol. 145v-149r: \"Manifesto dato fuori in Ratisbona dall Ministro dell'Elettore di Sassonia\" -- Fol. 49v-154v: \"Lettera d'un pedante grammatico al Re di Francia\" -- Fol. 55r-204v: Letters to various Vatican officials -- Fol. 205r-228v: Discourse on the controversy over regalian rights -- Fol. 229r-233v: \"Circa iurisdictionem Summi Pontificis temporalem\"."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS106": {"001": ["06-B4434"], "245 10": ["Quaestiones dominicales."], "505 0": ["Fol. 1r-46r: \"[rubr.] Incipiunt questiones dominicales magistri Bartolomei Brixiensis. [text] Ad honorem omnipotentis Dei et Ecclesie Romane cui presidet Gregorius IX...Solutio. Satis credo misericordiam adhibendam circam istum condempnatum.\""], "505 8": ["Fol. 46v-66v: \"[rubr.] Incipiunt questiones veneriales domini Bartolomei Brixiensis. De rescripti questio prima. [text] Queritur utrum in rescriptis aliquis teneatur facere mensionem de primo rescripto...Sed certe contrarium videtur per iura in prima parte allegata. [rubr.] Explicit. Deo laus.\""], "520": ["This manuscript contains the \"Questiones dominicales\" and the \"Quaestiones veneriales\" by the Italian scholar Bartolomeo da Brescia. The manuscript is very elegant, the handwriting is tidy and very is professional, and fol. 1r has a beautiful illumination which includes the use of gold. It was possibly copied for the library of a wealthy family to be used as a reading copy, but it was certainly never used as a working or studying copy. Fol. 66 and 67 are blank, but ruled in preparation for the copying of the text. Some room was left on fol. 46v, at the beginning of the \"Quaestiones veneriales\", for an initial which, however, was never completed."], "510 4": ["Bartholomaeus Brixiensis, Qvaestiones dominicales antiqvissimi ivris doctoris D. Bartholomaei Brixiensis ... per titulos digestae, in Qvaestiones ivris variae ac selectae (Lvgdvni [n.p.], 1572): 89-138.", "Bartholomaeus Brixiensis, Qvaestiones veneriales ... Bartholomaei Brixiensis ..., in Qvaestiones ivris variae: 138-164."], "100 0": ["Bartolomeo,|cda Brescia,|d-1258."], "852 8": ["CUL|bRBCAG|hRobbins MS 106|xCIN=JKN"], "260": ["[Netherlands?,|cbetween 1475 and 1500]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio :|aquia ultima voluntas"], "546": ["Latin."], "008": ["060912q14751500ne ||||||||||||00|||lat|d"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, September 2006."], "300": ["|3Original: |a68 leaves :|bparchment ;|c235 x 160 (150 x 110) mm bound to 240 x 175 mm.", "|3Copy: |a1 microfilm reel :|bnegative (MN 03-81) and positive (Robbins MS 106)"], "561": ["Flyleaf iii v has a note in pencil, in a 20th-century hand : \"Bartholomeus Brixiensis Questiones dominicales Manuscript on Vellum\" The rest of the text is effaced to the point of being illegible: only a few words can be read, with difficulty, and they pertain to the description of the decoration of the manuscript; the number of folios is given as \"66 pages.\""], "500": ["Ms. codex.", "Title from openong rubric, fol. 1r.", "Collation: Parchment, fol. i (marbled paper) + ii-iii (modern paper) + 68 + i-ii (modern paper) + iii (marbled paper); 1-8\u2078 9\u2074. Catchwords in the middle of the lower margin, on verso, by the hand of the scribe. Quire signatures in the right corner of the lower margin, on recto: a lower-case letter and a Roman numeral from i to iv. No contemporary foliation is provided. One row of pricking holes is visible on the outer margins.", "Layout: Written in 34 long lines; wide lower and outer margin. Ruled in lead. Few marginal additions.", "Script: Written in a textualis libraria script with a few cursive elements.", "Decoration: Fol. 1r, a 6-line illuminated initials, blue on a gold background, with black pen flourishings. Red rubrics; the ascenders often form loops. Many 2-line alternating red and blue initials throughout the text. Red paragraph marks.", "Binding: Modern brown morocco, slightly worn around the spine; gilt double borders with floral decorations at the corners on front and back cover; five raised bands on spine, six compartments with gilt floral ornamentation; paper flyleaves; marbled paper pastedowns. Title gilt- tooled on spine: \"Quaestiones dominicales Bartholomew of Brescia,\" where the English version of the author's name suggests that the book was bound in England.", "Origin: Written possibly in the Netherlands, during the last quarter of the 15th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 106."], "090 8": ["Robbins MS 106"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=67;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS243": {"001": ["06-B3667"], "260": ["[France,|cbetween 1679 and 1700]"], "505 0": ["Fol. 3r-159r: \"[text] Le s[eigneu]r Ihuillier qui est de la maison en societe' se Sorbonne et depuis grand maistre du college du Cardinal Le Moyne devant que de recevoir...19 Juin 1679 au pleine assemblee apres le rapour des quatres docteurs depoute' pour en faire lenamen (?).\""], "520": ["The manuscript is a well preserved book that recounts a discussion that took place at the Sorbonne in Paris, which involved the contribution of theology and law specialists. The last document cited in the manuscript (the final approval) is dated 1679, so the whole manuscript must have been copied after this date. Inserted between fol. 140 and 140 there was a receipt for a payment of \"trente sols pour une annee de la cense du siege qu'il occupe dans l'eglise de Notre Dame\", dated 29 march 1755 and signed by Artusot (?) Fabrienne."], "710 2": ["Bibliotheque du Chateau de Laplagne.|4asn|4fmo|5CUL."], "300": ["161 leaves :|bpaper ;|c190 x 110 (104 x 700) mm bound to 200 x 120 mm."], "852 8": ["CUL|bRBCAG|hRobbins MS 243|xCIN=JKN"], "008": ["060802q17691700fr ||||||||||||00|||fre|d"], "506": ["RESTRICTED ORIGINAL: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection.bbins Collection."], "245 00": ["Relation de ce qui s'est passe au Parlement le 16 febvrier 1677 a l'occasion d'une theze soutenue en Sorbonne le huict juine 1675."], "546": ["French."], "583": ["|zCataloged from existing description and in hand by Silvia Donghi, August 2006."], "561": ["Inside back cover, two 18th-19th century bookplates by two former owners. The first ex-libris reads: \"Bibliotheque de m[onsieur] le baron Zangiacomi\", and shows a coat of arms with a tree under a crown. The second ex-libris reads: \"Bibliotheque de Chateau de Laplagne\". On fol. 2r there is a note in French written in brown ink by a 18th century hand, that explains the contents of the manuscript. On flyleaf i verso there in the number \"A112\" written in pencil by a 20th century hand; the same hand writes down the number of the folios in the manuscript: \"c. 161.\" On f. 1r there is a big red capital \"C\" written in crayon."], "500": ["Ms. codex.", "Title from fol. 3r.", "Collation: Paper, fol. i (modern paper) + 161 + i (modern paper). No contemporary foliation is provided. Catchwords on the right side of the bottom margin.", "Layout: Written in 22 long lines. Not ruled.", "Script: Written in a tidy cursive hand with many loops, by one hand.", "Binding: Marbled leather over wooden boards; marbled paper used for the flyleaves. Raised bands on spine, 6 compartments. The spine is gold-tooled with floreal motives, the title: \"Relation d'un theze\", and the initial \"M\". Edges painted red. Edge of the boards gold-tooled.", "Origin: Written in France after 1679, and possibly before the end of the 17th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 243.", "Former shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), KJV642 .R44."], "700 1": ["Zangiacomi, Joseph,|cBaron,|d1766-1846.|4asn|4fmo|5CUL."], "090 8": ["Robbins MS 243"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS70": {"001": ["06-B3040"], "245 10": ["Ad memoriam reducendo."], "505 0": ["Fol. 1r-3r: \"[rubr.] Copia bulle indulgentie Jubilei que fuit olim de centum in centum annos sed Clemens papa VI statuit eandem de quinquaginta in quinguaginta [text] Clemens episcopus servus servorum Dei Ad memoriam reducendo causam cuius gracia per filium suum celo misit ex alto...et eternam maledictionem se noverit incurrisse. Datum Avinione sexto februarii (?) pontificatus nostri anno primo que fuit dies XXVI januarii anno Domini MCCCXLIV."], "520": ["15th Century transcription of a Bull of Clement VI, \"Ad memoriam reducendo,\" issued in 1344."], "650 0": ["Bulls, Papal."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=41;fullview=yes"], "110 2": ["Catholic Church.|bPope (1342-1352 : Clement VI)"], "852 8": ["CUL|bRBCAG|hRobbins MS 70|xCIN=JKN"], "008": ["060627q14251475gw ||||||||||||00|||lat|d"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "546": ["Latin."], "583": ["|zCataloged in hand by Jennifer K. Nelson, July 2006."], "300": ["|3Original:|a3 leaves :|bpaper ;|c206 x 142 (185 x 120) mm. bound to 212 x 149.", "|3Copy: |a1 microfilm reel :|bnegative (MN 02-57) and positive (Robbins MS 70)"], "561": ["Written in pencil on the front pastedown: \"ADr. 1083/40 Clemens VI (\u0308F\u0308\u00e4lschung) Handschrift Deutschland ca. Mitte 15. Jh.\" ; on the bottom right-hand corner of the back pastedown is the number \"70.\""], "500": ["Ms. codex.", "Title from opening sentence (fol. 1r).", "Collation: Paper, fol. i + 3 + i; 1\u00b2\u207d\u207a\u00b9\u207e.", "Layout: 44 long lines, ruled in ink on fol. 1r.", "Script: Written in a cursive libraria script by one hand.", "Decoration: 3-line inital in red at beginning of text. First letter of each paragraph touched in red throughout.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 70."], "090 8": ["Robbins MS 70"], "260": ["[Germany,|cbetween 1425 and 1475]"], "246 3": ["Copia bulle indulgentie Jubilei"], "LEADER": ["00000ctm 2200000 a 4500"]}, "RobbinsMS244": {"001": ["ocn375587154"], "245 10": ["[Formulae instrumentorum]"], "040": ["BOL|eamremm|cBOL"], "520": ["Complete reference manual of notarial theory and practice as was current in 15th century Piedmont (possibly Savona or Acqui), Italy. Its compiler, the lawyer and notary Battista Granoni (Granonis) of Genoa, studied law in Florence (fol. 1va \"hanc sic dictam artem legi in alma civitate florentie\"). The introductory pages are followed by a detailed index listing about 550 topics such as the proper form of a document, record-keeping and filing systems, validity of copies, qualifications of a notary, proper language, wording of contracts, emphyteusis, dowry, arbitration of disputes, guardianship, duties and qualifications of witnesses, donations and bequests. There are also about 100 specimens of various types (formae) of instruments. This is possibly an autograph manuscript."], "260": ["Italy,|c[15th century]"], "008": ["090608q14011499it 000 0 lat d"], "099": ["Robbins MS 244"], "505 0": ["Fol. ir: some notes with date 1554 ; fol. ir: introductory material (not in main hand); fol. iiv-iiir: more introductory material in main hand ; fol. ivr-vr: more introductory material (not in main hand) ; fol. vir: half column of text (not in main hand) ; fol. viv-xv: index of legal topics ; fol. 1ra-2va: [introduction] In exercendis humanorum actibus pot---siam pars est scriptura...Ego Batista Granonis legum doctor Januensis ad correctionem melius sententium suplicas quod si quid est male postium cum bene posito compensetur. Deo gratias Amen\" ; fol. 2vb- 131ra: \"[text] Cupiens rite et recte operari in officio notarius, ut recte sibi consulat, sibi duos libros constituat, unum brevem et longum alterum quadratum et maiorem...et sub obligatione dicti monasterii omnium bonorum p[--]um et futurorum ac dicti [------] insuper dicti d[--]s Abas et monaci praelibati et qualibus? eorum manibus eorum et [----]libus eorum beatis scripturis iuramentum [------] praedicta fieri ad utilitatem et non [ ------] dicti monasterii de quibus actum\" ; fol. 131v-132r : ruled columns left blank ; fol. 132v-133r: \"[brief tract, not in main hand] Quid sit ars notariatus\" ; fol. 133v- 145r: ruled columns left blank ; fol. 145v: brief text, not in main hand."], "100 1": ["Granoni, Battista."], "003": ["OCoLC"], "546": ["Latin."], "506": ["RESTRICTED ORIGINAL. Use of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["CUL|bRBCAG|xCIN=JKN"], "500": ["Ms. codex", "Title supplied by cataloger.", "Collation: Paper, fol. x + 145; 1-14\u00b9\u2070 15 \u2076 (-1).", "Layout: Written in 2 columns of 30-33 lines; catchwords at the end of each quire.", "Script: Most of the text is written in a small, neat notarial cursive by one hand (fol. iiv-iiiv, vir-xv, 1r- 131r); some short texts, additions, and notes throughout written in a second, less legible hand (fol. iv-iir, ivr- vr, 145v); half-column of text (fol. vir) in possible third hand; brief note after very end of main text, in second column, in a fourth hand: \"Ego Iohanes Scataratius\" dated 1531 (fol. 131rb) ; short text in fifth hand with title \"Quid sit ars notariatus\" written in long lines (fol. 132v-133r).", "Binding: Original binding. Two heavy wooden boards fastened onto three leather thongs. Three clasps, lacking; two catches preserved on back cover. Leather spine, now lacking; sewing and thongs exposed. One-half of front cover is lacking, remaining half heavily wormed. Missing half has been replaced (complete with wormholes); inside front cover is reinforced with glued-on 16th century paper fragments with Latin and Italian texts and scribbles. Pastedown on back cover has some pen trials, and a cursive 4-line note dated 1574 (22 March).", "Origin: It is likely that the notary was in the Piedmont city of Savona or Acqui and the concluding part of Granoni's introduction (fol. 1v) suggests that he intended this text to be circulated among his colleagues: \"Ego Batista Granonis legum doctor Januensis ad correctionem melius sententium suplicas quod si quid est male postium cum bene posito compensetur.\"", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 244."], "583": ["|zCataloged from existing description and in hand by Jennifer K. Nelson, June 2009."], "005": ["20090608024708.0"], "LEADER": ["00000ntm 2200000Ia 4500"], "035": ["(OCoLC)375587154"], "300": ["|3Original:|a155 leaves :|bpaper ; 300 x 220 (190 x 170) mm bound to 310 x 225 mm."]}, "RobbinsMS72": {"001": ["ocn505684145"], "260": ["Italy,|c[between 1550 and 1570]"], "040": ["BOL|eamremm|cBOL"], "520": ["All three documents are concerned with the granting of privileges and immunities to the Society of San Giovanni Battista Decollato in Florence. Francesco Alberico was apostolic protonotary and General Auditor for the Chamber of Causes in the Roman Curia. Articles 1 and 2 were notarized by Desiderio Bo[nis?], apostolic notary (notarial sign on fols. 7r and 9v); article 3 was notarized by Fausto Piroli, apostolic notary (notarial sign on fol. 12v)."], "300": ["|3Original:|a14 leaves :|bparchment ;|c230 x 155 (180 x 115) mm bound to 235 x 165 mm.", "|3Copy:|a1 microfilm reel :|bnegative (MN 02-59) and positive (Robbins MS 72)"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=43;fullview=yes"], "008": ["100209q15501570it 000 0 lat d"], "099": ["Robbins MS 72"], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Jennifer K. Nelson, February 2010."], "003": ["OCoLC"], "245 00": ["[Documents concerning the granting of privileges and immunities to the Society of San Giovanni Battista Decollato in Florence]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "852": ["BOL|bRBCAG|xCIN=JKN"], "561": ["Manuscript was once in the library of Prince Piero Ginori Conti in Florence (his bookplate on inside front cover)."], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. ii (parchment and paper) + 14 + ii (parchment and paper); 1\u2078 2\u2076.", "Layout: Written in 34 long lines; ruled in ink.", "Script: Each of the three texts written in a neat italic script by a different hand. Two different notarial hands are present, one on fol. 7r and 9v, one on fol. 12v.", "Decoration: Papal coats of arms on fols. 1r, 8r, and 13r.", "Binding: Blind-stamped leather over pasteboard hardback; two modern yellow cloth ties, one lacking; clump of knotted strings at the bottom of the document, near the spine. Chain of six 5 cm links and one pronged nail attached to the cover.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 72."], "700 1": ["Ginori Conti, Piero,|d1865-1939.|4asn|4fmo|5CUL."], "005": ["20100209054828.0"], "505 0": ["Fol. 1r-7v: Francesco Alberico, Inspeximus of Julius III Bull \"Illius qui pro Dominici\" [9 February 1554] -- Fol. 8r-9v: Cardinal Flavio Orsini, Inspeximus of Pius IV Bull \"Pastoralis eterni\" [19 July 1563] -- Fol. 10r-13r: Cardinal Alessandro Riario, Inspeximus of Pius V Motu proprio \"Cum sicut accepimus\" [29 July 1569]."], "035": ["(OCoLC)505684145"], "546": ["Latin."], "LEADER": ["00000ntm 2200000Ia 4500"]}, "RobbinsMS85": {"001": ["ocn670502434"], "245 10": ["Incipi\u0169t priuilegia ordinis fratrum heremitar\u0169 sancti Augustini :|bvidel[icet] mare magn\u0169 c\u0169 \u0129nouatione ipsius : vna cu[m] quibusd\u00e3 alijs priuilegijs & indultis ac supplicati\u00f5ibus c\u00f5cessis [con]gregati\u00f5i obseruantie lombardie nuncupate eiusd\u1ebd ordinis."], "040": ["BOL|cBOL|edcrmb|dBOL"], "852": ["CU-L|bRBCAG|xCIN=JL"], "710 2": ["Catholic Church.|bPope."], "110 2": ["Augustinians."], "260": ["[Pavia :|bBernardinus de Garaldis,|c12 May 1506]."], "099": ["Robbins MS 85"], "590": ["2 illuminated initials.", "Binding: contemporary leather (back partly restored) over wooden boards, bevel-cut, elaborately blind-tooled on back and covers, gold-tooled on covers; 2 clasps attached front to back (partly wanting); page-edges gilt and gauffered; sewn on 3 double tawed leather bands; endpaper with ms.: Martij Hieronymus Fauallis ciuis & notarius ...; in a box.", "Has bound in at beginning 17 leaves of ms. containing letters of Popes Leo X and Julius II concerning the Monastery of St. Hilary at Ferrara.", "Originally classed as: BQV100 A83 1506 Manuscript"], "500": ["Imprint from colophon.", "Signatures: a-i\u2078.", "Gothic type; capital spaces (supplied).", "Sideglosses.", "Text begins: Sixtus Quartus ep\u0303s seru[us] seruor\u0169 dei.", "Colophon, i8b: Expliciunt priuilegia vna c\u0169 supplicationibus p\u0303fatae [con]gregati\u00f5is obseru\u00e3tion\u0169 fratr\u0169 hr\u0303mitar[um] sc\u0129 Augustini p[er] magistr\u0169 Bernardin\u0169 de Garaldis \u0129pressa: & per vener\u00e3d\u0169 pr\u1ebd[m] fr\u1ebd[m] Alex\u00e3dr\u0169 de Tortis papi\u1ebdse[m] eiusd\u1ebd [con]gregationis: ab originalibus litteris de verbo ad verb\u0169 extracta ac dilig\u1ebdter correcta & emendata Papie die i2. Maij. i506.", "Leaf e2a: Explicit mare magnum cu[m] innouati\u00f5e ipsi[us] per pontificem maximum Sixtu[m] quartu[m] feliciter innouatu[m].", "Large woodcut apparently of St. Augustine on t.p.; full- page woodcut of a bishop (St. Augustine?) and an abbot on e2b."], "246 30": ["Priuilegia ordinis fratrum heremitar\u0169 sancti Augustini"], "246 3": ["Incipiunt priuilegia ordinis fratrum heremitarum sancti Augustini", "Incipiunt privilegia ordinis fratrum heremitarum sancti Augustini", "Priuilegia ordinis fratrum heremitarum sancti Augustini", "Privilegia ordinis fratrum heremitarum sancti Augustini", "Mare magnum", "Sixtus Quartus ep\u0303s seru' seruor\u0169 dei", "Sixtus Quartus ep\u0303s seru[us] seruor\u0169 dei", "Sixtus Quartus episcopus seruus seruor\u0169 dei", "Sixtus Quartus episcopus servus servorum dei"], "300": ["[144] p. :|b[2] ill. (woodcuts) ;|c15 cm. (8vo)"], "610 20": ["Augustinians|zItaly|zLombardy.", "Augustinians."], "043": ["e-it---"], "650 0": ["Indulgences.", "Friars|vPrivileges and immunities."], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?shelfmark=Robbins%20ms;smode=basic;rmode=digscript; docsPerPage=1;startDoc=53;fullview=yes"], "008": ["920128s1506 it a 000 0 lat d"], "079": ["ocm84850161"], "003": ["OCoLC"], "655 7": ["Privileges and immunities.|2lcgft"], "700 1": ["Tortis, Alexander de.", "Garaldi, Bernardino,|d15th/16th cent.|4bkp|5CUL"], "005": ["20111024045338.0"], "035": ["(OCoLC)670502434", "(CStRLIN)CUBL92-B248"], "LEADER": ["00000cam 2200000 a 4500"]}, "RobbinsMS32": {"001": ["06-B4070"], "245 10": ["[Liber sextus Decretalium cum glossa Iohannis Andree]"], "505 0": ["Fol. 3r-99r: \"[Bonifacius episcopus serv]us servorum dei dilectis filiis doctoribus et scolaribus universis Bononie commorantibus salutem et apostolicam benedictionem. Sacrosancte Romane Ecclesie quam imperscrutabilis divine providencie altitudo...et in tuis expensis continue domestici commensales etiam si ex illis aliquos aliquando pro tuis gerendis negociis ab esse contingat. Bonifacius VIII.\""], "505 8": ["Fol. 99v-108v: \"[rubr.] De regulis iuris rubrica. [text] Beneficium ecclesiasticum non potest licite sine institutione canonica optineri...Certum est quod is committit in legem qui legis verba complectens contra legis nititur voluntatem. Idem. Data Rome apud Sanctum Petrum quinto nonas Marcii pontificatus nostri anno quarto. [rubr.] Explicit textus sexti libri, Deo gracias amen.\"", "Fol. 3r-108v: [gloss] ...offeram iam licet nouiter inchoatos. Iohannes Andree. Deo gratias et Virginis gloriose Marie matris eiusdem, amen amen amen. [rubr.] Explicit apparatus domini Iohannis Andree super vi liber Decretalium.\""], "520": ["This preciously illuminated manuscript of the Liber sextus with the gloss of Giovanni d'Andrea was apparently also a working copy, since it has many additions and marginal and interlinear notes, both related to the main text and to the gloss. On the flyleaves ii and iii, now numbered as fol. 1 and 2, there are some extensive notes taken from the Liber sextus in a contemporary textualis currens script, and a \"versus\" and some \"exempla\" against the Black Friars. The first extensive note is signed: \"Io. de Bor.\" which could possibly refer to the 14th cetury canonist Iohannes de Borbonio."], "510 4": ["Liber sextus decretalium D. Bonifacii Papae VIII suae integritati una cum Clementinis et Extrauagantibus, earumque glossis restitutus cum priuilegio Gregorii XIII. Pont. Max. et aliorum principum, Romae, In Aedibus Populi Romani, 1584."], "100 0": ["Boniface|bVIII,|cPope,|dd.1303."], "852 8": ["CUL|bRBCAG|hRobbins MS 32|xCIN=JKN"], "700 0": ["Giovanni d'Andrea,|dapproximately 1270-1348.", "Iohannes de Borbonio,|dca. 1330."], "260": ["[Italy,|cbetween 1350 and 1375]"], "506": ["RESTRICTED ORIGINAL. USE POSITIVE MICROFILM COPY ONLY: |bUse of original only by permission. Inquiries concerning this item should be directed, in writing, to the reference librarian for The Robbins Collection."], "246 2": ["|iSecundo folio: |aet sub debitis titulis"], "546": ["Latin."], "583": ["|zCataloged from existing description by Luminita Florea and in hand by Silvia Donghi, August 2006."], "300": ["|3Original: |a109 leaves: |bparchment ;|c440 x 280 (360 x 210) mm bound to 450 x 285 mm.", "|3Copy: |a1 microfilm reel :|bnegative and positive (Robbins MS 32)"], "008": ["060823q13501375it ||||||||||||00|||lad||"], "500": ["Ms. codex.", "Title supplied by cataloger.", "Collation: Parchment, fol. i (modern paper) + ii-iii (parchment) + 109 + i (modern paper); 1\u00b2 2-10\u00b9\u2070 11-12\u2078 13\u00b2\u207b\u00b9. No contemporary foliation is provided; modern foliation in pencil, in Arabic numerals, in the right corner of the upper margin. Signature marks on the first half of each quire, with red symbols. Catchwords in the middle of the bottom margins.", "Layout: Both the text and the gloss are arranged on two columns of various length; the gloss surrounds the text and can have up to 90 lines for each columnn. Ruled in lead. Large use of line fillers, both at the end of the line and at the end of the page.", "Script: Written in a textualis libraria script, close to the \"littera bononiensis\", apparently by one hand. Below top line.", "Decoration: Many illuminated initials, mostly on 3 or 4 lines, throughout the text. Fol. 3r, the upper half of the large 10-line illuminated initial, showing Boniface VIII, has torn and replaced with a piece of parchment; fol. 5r, a priest blessing with his hand; fol. 10v, a bird; fol. 28r, 30v, 31v, 34r, 37v, 38r, 39v, 43r, 46r, 46v, 47r, 50v, 62r, 67v, 69r, 70r, 72v, 74v, 75v, 84v, 86r, 89v, 99v, 108v, men's heads; fol. 69v, a nun's head with a veil; fol. 54r, 62r, 67v, a pope's head (Boniface VIII); fol. 41v, 77v, ivy leaves; fol. 10v, a bird; fol. 39v, two animals (dogs? foxes?); fol. 72v, a dragon; fol. 78r, a man pointing his finger; fol. 86v, 98r, a blossom. The main colours used are blue, gold, orange, pink, green, sometimes black. Fol. 103r, a large 17-line red and blue penworked initial. Many red and violet, and blue and red pen flourishing initials throughout the text, mostly on 2 lines. Alternating red and blue paragraph signs. Red and blue running titles in the upper margin. Red rubrics. Many \"maniculae\" and grotesques.", "Binding: 14th century, original goatskin over wooden boards, blindstamped, partly restored; four new clasps and metal corner pieces. Modern paper flyleaves.", "Origin: Written and decorated in Italy, in the third quarter of the 14th century.", "Shelfmark: Berkeley, CA, The Robbins Collection, UC Berkeley School of Law (Boalt Hall), Robbins MS 32."], "090 8": ["Robbins MS 32"], "856 42": ["|3Digital Scriptorium|uhttp://ucblibrary4.berkeley.edu: 8088/xtf22/ search?bid=11;smode=bid;rmode=digscript;docsPerPage=1;star tDoc=118;fullview=yes"], "LEADER": ["00000cam 2200000 a 4500"]}} \ No newline at end of file diff --git a/armarium_app/app/views.py b/armarium_app/app/views.py new file mode 100644 index 0000000..38edb55 --- /dev/null +++ b/armarium_app/app/views.py @@ -0,0 +1,389 @@ +import os, sys + +relpath = os.path.dirname(__file__) +sys.path.append(relpath) + +from flask import render_template, redirect, request +from flask.json import dumps, jsonify +from app import app, models, db +from .forms import SearchForm +from .data_parse_and_load import load +import json, re, csv +#from urllib.request import urlopen +from bs4 import BeautifulSoup +from sqlalchemy import func, distinct + + +''' +print(relpath) + +#load data +sourcefile = os.path.join(relpath, 'trial_II160119.json') +sourceobj = open(sourcefile) +sourcedict = json.load(sourceobj) +sourceobj.close() + +#parse data +allrecs = load(sourcedict) + +#load mss into database +for record in allrecs: + if record == 'RobbinsMSCould not find valid shelfmark': + continue + print record + #print(allrecs[record]['places']) + #for place in allrecs[record]['places']: + # print '\t', place, 'type:', allrecs[record]['places'][place] + #print allrecs[record]['publisher'] + #print '\n' + + + #print(record) + #print(allrecs[record]) + #print(int(allrecs[record]['shelfmark'].split(' ')[2])) + #print('\n') + + + + + + ms = models.manuscript( + id = int(allrecs[record]['shelfmark'].split(' ')[2]), + shelfmark = allrecs[record]['shelfmark'], + date1 = allrecs[record]['date1'], + date2 = allrecs[record]['date2'], + datetype = allrecs[record]['datetype'], + language = allrecs[record]['language'], + num_volumes = allrecs[record]['volumes'], + summary = allrecs[record]['summary'], + ownership_history = allrecs[record]['ownership_history'] + + ) + db.session.add(ms) + + db.session.commit() + + #iterate over volumes to add volume-specific entities (volume attributes, watermarks, content items) + for msvol in allrecs[record]['volumeInfo']: + #print(msvol) + volItem = models.volume( + support = allrecs[record]['support'], + extent = msvol['extent'], + extent_unit = msvol['extentUnit'], + bound_width = msvol['boundWidth'], + bound_height = msvol['boundHeight'], + leaf_width = msvol['supportWidth'], + leaf_height = msvol['supportHeight'], + written_width = msvol['writtenWidth'], + written_height = msvol['writtenHeight'], + size_unit = msvol['units'], + quire_register = msvol['quires'], + phys_arrangement = msvol['arrangement'], + ms_id = ms.id + ) + db.session.add(volItem) + db.session.commit() + #commit here to have id + + #if 'watermarks' not in msvol: + #print allrecs[record] + + for ms_wm in msvol['watermarks']: + wmQuery = models.watermark.query.get(ms_wm[0]) + if wmQuery == None: + wmItem = models.watermark( + id = ms_wm[0], + name = ms_wm[1], + url = ms_wm[2], + mss = [models.manuscript.query.get(ms.id)] + ) + db.session.add(wmItem) + else: + wmItem = models.watermark.query.get(ms_wm[0]) + wmItem.mss.append(models.manuscript.query.get(ms.id)) + + for contentItem in msvol['contents']: + contentObj = models.content_item( + text = contentItem['text'], + fol_start_num = contentItem['startFol'], + fol_start_side = contentItem['startSide'], + fol_end_num = contentItem['endFol'], + fol_end_side = contentItem['endSide'], + ms_id = ms.id, + vol_id = volItem.id + ) + db.session.add(contentObj) + + + db.session.commit() + + for title in allrecs[record]['titles']: + titleInstance = models.title( + title_text = title['text'], + title_type = title['type'], + ms_id = ms.id + ) + db.session.add(titleInstance) + db.session.commit() + + for person in allrecs[record]['people']: + #print(person) + #print(allrecs[record]['people'][person]) + #print(allrecs[record]['people'][person]['relationship']) + + #check to see if person is already in database; + #if not, add to DB + #if so, retrieve and add new relationships + personQuery = models.person.query.filter_by(name_simple=person).first() + if personQuery == None: + personRec = models.person( + name_simple = person, + name_display = allrecs[record]['people'][person]['displayName'], + name_fuller = allrecs[record]['people'][person]['Fullname'], + year_1 = allrecs[record]['people'][person]['date1'], + year_2 = allrecs[record]['people'][person]['date2'], + datetype = allrecs[record]['people'][person]['datetype'], + numeration = allrecs[record]['people'][person]['Numeration'], + title = allrecs[record]['people'][person]['Title'] + ) + db.session.add(personRec) + db.session.commit() + + #new query of newly committed person entity to get ID + newPersonRecord = models.person.query.filter_by(name_simple=person).first() + for rel in allrecs[record]['people'][person]['relationship']: + relRec = models.person_ms_assoc( + person_id = newPersonRecord.id, + ms_id = ms.id, + assoc_type = rel + ) + db.session.add(relRec) + db.session.commit() + + else: + for rel in allrecs[record]['people'][person]['relationship']: + relRec = models.person_ms_assoc( + person_id = personQuery.id, + ms_id = ms.id, + assoc_type = rel + ) + db.session.add(relRec) + db.session.commit() + + for placelisting in allrecs[record]['places']: + #iterate over places + #check db to see if it exists + placeQuery = models.place.query.filter_by(place_name = placelisting['name']).first() + if placeQuery == None: + #if not, create new place + addedPlace = models.place( + place_name = placelisting['name'], + place_type = placelisting['type'], + lat = placelisting['lat'], + lon = placelisting['lon'], + mss = [models.manuscript.query.get(ms.id)] + ) + db.session.add(addedPlace) + db.session.commit() + else: + placeQuery.mss.append(models.manuscript.query.get(ms.id)) + db.session.commit() + +''' + +@app.route('/') +def homepage(): + lats = 0 + lons = 0 + count = 0 + placedict = {} + + allmss = models.manuscript.query.all() + for ms in allmss: + count +=1 + for allPlace in ms.places: + if allPlace.place_type == 'country': + + if allPlace.place_name not in placedict: + placedict[allPlace.place_name] = {'center': {'lat': allPlace.lat, 'lng': allPlace.lon}, 'count': 1} + else: + placedict[allPlace.place_name]['count'] += 1 + lats = lats + allPlace.lat + lons = lons + allPlace.lon + + avlats = lats/count + avlons = lons/count + #print placedict + print avlats, avlons + placeobj = dumps(placedict) + #need to use regex to remove quotes in json string and + subbedplace =re.sub(r'[\"\' ]', '', placeobj) + print(subbedplace) + + return render_template('home.html', avgLat = avlats, avgLon = avlons, places=subbedplace, pagetitle = 'Manuscripts of the Robbins Collection') + +@app.route('/add_ms', methods = ['GET', 'POST']) +def add_ms(): + #to be implemented later + pass + +@app.route('/list_mss', methods = ['GET']) +def list_mss(): + allmss = models.manuscript.query.all() + return render_template('home2.html', recs = allmss) + +@app.route('/ms', methods = ['GET']) +def ms_view(idno): + """Page view for individual MS""" + + pagems = models.manuscript.query.get(idno) + + #pagedict: dictionary of nodes and links in a graph centered on the MS; to be used for vis + pagedict = {'nodes': [{"name": pagems.shelfmark, "group": 0, "role": 'manuscript', "dbkey": pagems.id}], 'links': []} + index = 1 + for person_rel in pagems.assoc_people: + pagedict['nodes'].append({"name": person_rel.person.name_display, "group": 1, + "role": person_rel.assoc_type, "dbkey": person_rel.person.id}) + pagedict['links'].append({"source": index, "target": 0, "value": 10}) + index +=1 + + for place_rel in pagems.places: + pagedict['nodes'].append({"name": place_rel.place_name, "group": 2, "role": place_rel.place_type, "dbkey": place_rel.id}) + pagedict['links'].append({"source": index, "target": 0, "value": 10}) + index +=1 + + #if pagems.publisher + #publisher not yet implemented, but need to add + #print(pagedict) + + graphobj = json.dumps(pagedict) + #graphobj = jsonify(pagedict) + + return render_template('msview.html', pagetitle = pagems.shelfmark, ms=pagems, graphsend=graphobj) + +@app.route('/search', methods = ['GET', 'POST']) +def mss_search(): + #needs lots of work, not yet fully implemented + searchform = SearchForm() + if searchform.validate_on_submit(): + searchquery = searchform.searchfield.data + results = models.manuscript.query.filter(searchquery in manuscript.summary) + print(results) + return render_template('searchresult.html', results =results) + +@app.route('/places', methods = ['GET']) +def list_places(): + place_list = models.place.query.all() + + return render_template('placelist.html', recs=place_list, pagetitle='Places of the Robbins Manuscripts') + + +@app.route('/place', methods = ['GET']) +def view_place(placeid): + #show info about a place in conjunction with their relationships with MSS + focusplace = models.place.query.get(placeid) + return render_template ('placeview.html', location=focusplace, pagetitle=focusplace.place_name + ' in the Robbins Manuscripts') + +@app.route('/person', methods = ['GET']) +def view_person(personid): + #show info about a person in conjunction with their relationships with MSS + focusperson = models.person.query.get(personid) + + return render_template('personview.html', person = focusperson, pagetitle = focusperson.name_display + ' in the Robbins Manuscripts') + +@app.route('/people', methods = ['GET']) +def list_people(): + allpeople = models.person.query.order_by(models.person.name_display).all() + + return render_template('personlist.html', pagetitle='People in the Robbins Manuscripts', people=allpeople) + +@app.route('/watermark', methods = ['GET', 'POST']) +def view_wm(wmid): + #show info about a watermark, link to Briquet page, graph of use in MSS + page_wm = models.watermark.query.get(wmid) + + return render_template('wmview.html', mainwm = page_wm, pagetitle = page_wm.name + ', ' + str(page_wm.id)) + +@app.route('/watermarks', methods = ['GET']) +def list_watermarks(): + returnlist = [] + wmtypes = models.watermark.query.group_by(models.watermark.name).all() + for x in wmtypes: + holder = [] + for y in models.watermark.query.filter_by(name=x.name).all(): + holder.append(y) + returnlist.append((x, holder)) + return render_template('wmlist.html', pagetitle='Watermarks', recs = returnlist) + + + +@app.route('/sendjson', methods = ['GET']) +def send_json(): + #return JSON of relationships, to expand and re-render graphs + valuemap = {'manuscript': models.manuscript, 'person': models.person, 'watermark': models.watermark, 'place': models.place} + table = request.args.get('entity') + ent_id = request.args.get('id') + result = valuemap[table].query.get(ent_id) + + returndict = {'nodes': [], 'links': []} + index = 1 + #index starts from 0; on transferring to vis, will have to append and adjust indices + if table == 'manuscript': + #this function was called from a manuscript; send back MS and related entities + #don't need the manuscript itself; calling item is already in the graph and doesn't need to be added + #actually, this is contextually dependent; need to figure out a way to deal + for person_rel in result.assoc_people: + returndict['nodes'].append({'name': person_rel.person.name_display, 'group': 1, + 'role': person_rel.assoc_type, "dbkey": person_rel.person.id}) + returndict['links'].append({'source': index, 'target': 0, 'value': 10}) + index +=1 + + for place_rel in result.places: + returndict['nodes'].append({"name": place_rel.place_name, "group": 2, "role": place_rel.place_type, "dbkey": place_rel.id}) + returndict['links'].append({"source": index, "target": 0, "value": 10}) + print place_rel.place_name, place_rel.lat, place_rel.lon + index +=1 + + for wm in result.watermarks: + returndict['nodes'].append({'name': wm.name, 'group': 3, 'role': 'watermark', 'dbkey': wm.id}) + returndict['links'].append({'source': index, 'target': 0, 'value': 10}) + index +=1 + #need to add orgs, external docs, subject, publisher here when implemented + + return jsonify(returndict) + + elif table == 'person': + returndict['nodes'].append({'name': result.name_display, 'group': 1, 'role': '', 'dbkey': result.id}) + #returndict['links'].append({'source': index, 'target': 0, 'value': 10}) + index +=1 + + for ms_rel in result.ms_relations: + returndict['nodes'].append({'name': models.manuscript.query.get(ms_rel.ms_id).shelfmark, 'group': 0, 'role': 'manuscript', 'dbkey': ms_rel.id}) + returndict['links'].append({'source': index, 'target': 0, 'value': 10}) + index +=1 + + return jsonify(returndict) + + elif table == 'watermark': + returndict['nodes'].append({'name': ('Watermark '+ result.name), 'group': 3, 'role': 'watermark', 'dbkey': result.id}) + + for ms_rel in result.mss: + returndict['nodes'].append({'name': ms_rel.shelfmark, 'group': 0, 'role': 'manuscript', 'dbkey': ms_rel.id}) + returndict['links'].append({'source': index, 'target': 0, 'value': 10}) + index +=1 + + return jsonify(returndict) + + elif table == 'place': + returndict['nodes'].append({'name': (result.place_name), 'group': 1, 'role': 'place', 'dbkey': result.id}) + + for ms_rel in result.mss: + returndict['nodes'].append({'name': ms_rel.shelfmark, 'group': 0, 'role': 'manuscript', 'dbkey': ms_rel.id}) + returndict['links'].append({'source': index, 'target': 0, 'value': 10}) + index +=1 + + return jsonify(returndict) + + else: + raise NotImplentedError('Entity not yet implemented') + diff --git a/armarium_app/arm_env/.Python b/armarium_app/arm_env/.Python new file mode 120000 index 0000000..9ba4d28 --- /dev/null +++ b/armarium_app/arm_env/.Python @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/Python \ No newline at end of file diff --git a/armarium_app/arm_env/bin/activate b/armarium_app/arm_env/bin/activate new file mode 100644 index 0000000..89be866 --- /dev/null +++ b/armarium_app/arm_env/bin/activate @@ -0,0 +1,78 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + unset -f pydoc + + # reset old environment variables + # ! [ -z ${VAR+_} ] returns true if VAR is declared at all + if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then + PATH="$_OLD_VIRTUAL_PATH" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then + PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null + fi + + if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then + PS1="$_OLD_VIRTUAL_PS1" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "${1-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +if ! [ -z "${PYTHONHOME+_}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then + _OLD_VIRTUAL_PS1="$PS1" + if [ "x" != x ] ; then + PS1="$PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" + fi + export PS1 +fi + +# Make sure to unalias pydoc if it's already there +alias pydoc 2>/dev/null >/dev/null && unalias pydoc + +pydoc () { + python -m pydoc "$@" +} + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null +fi diff --git a/armarium_app/arm_env/bin/activate.csh b/armarium_app/arm_env/bin/activate.csh new file mode 100644 index 0000000..030b843 --- /dev/null +++ b/armarium_app/arm_env/bin/activate.csh @@ -0,0 +1,36 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + + +if ("" != "") then + set env_name = "" +else + set env_name = `basename "$VIRTUAL_ENV"` +endif + +# Could be in a non-interactive environment, +# in which case, $prompt is undefined and we wouldn't +# care about the prompt anyway. +if ( $?prompt ) then + set _OLD_VIRTUAL_PROMPT="$prompt" + set prompt = "[$env_name] $prompt" +endif + +unset env_name + +alias pydoc python -m pydoc + +rehash + diff --git a/armarium_app/arm_env/bin/activate.fish b/armarium_app/arm_env/bin/activate.fish new file mode 100644 index 0000000..1e47be1 --- /dev/null +++ b/armarium_app/arm_env/bin/activate.fish @@ -0,0 +1,76 @@ +# This file must be used using `. bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. +# Do not run it directly. + +function deactivate -d 'Exit virtualenv mode and return to the normal environment.' + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. + set -l fish_function_path + + # Erase virtualenv's `fish_prompt` and restore the original. + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + end + + set -e VIRTUAL_ENV + + if test "$argv[1]" != 'nondestructive' + # Self-destruct! + functions -e pydoc + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV "/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# Unset `$PYTHONHOME` if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +function pydoc + python -m pydoc $argv +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # Copy the current `fish_prompt` function as `_old_fish_prompt`. + functions -c fish_prompt _old_fish_prompt + + function fish_prompt + # Save the current $status, for fish_prompts that display it. + set -l old_status $status + + # Prompt override provided? + # If not, just prepend the environment name. + if test -n "" + printf '%s%s' "" (set_color normal) + else + printf '%s(%s%s%s) ' (set_color normal) (set_color -o white) (basename "$VIRTUAL_ENV") (set_color normal) + end + + # Restore the original $status + echo "exit $old_status" | source + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/armarium_app/arm_env/bin/activate_this.py b/armarium_app/arm_env/bin/activate_this.py new file mode 100644 index 0000000..f18193b --- /dev/null +++ b/armarium_app/arm_env/bin/activate_this.py @@ -0,0 +1,34 @@ +"""By using execfile(this_file, dict(__file__=this_file)) you will +activate this virtualenv environment. + +This can be used when you must use an existing Python interpreter, not +the virtualenv bin/python +""" + +try: + __file__ +except NameError: + raise AssertionError( + "You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))") +import sys +import os + +old_os_path = os.environ.get('PATH', '') +os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path +base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if sys.platform == 'win32': + site_packages = os.path.join(base, 'Lib', 'site-packages') +else: + site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') +prev_sys_path = list(sys.path) +import site +site.addsitedir(site_packages) +sys.real_prefix = sys.prefix +sys.prefix = base +# Move the added items to the front of the path: +new_sys_path = [] +for item in list(sys.path): + if item not in prev_sys_path: + new_sys_path.append(item) + sys.path.remove(item) +sys.path[:0] = new_sys_path diff --git a/armarium_app/arm_env/bin/easy_install b/armarium_app/arm_env/bin/easy_install new file mode 100755 index 0000000..a168cfc --- /dev/null +++ b/armarium_app/arm_env/bin/easy_install @@ -0,0 +1,11 @@ +#!"/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python3.5" + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/armarium_app/arm_env/bin/easy_install-3.5 b/armarium_app/arm_env/bin/easy_install-3.5 new file mode 100755 index 0000000..a168cfc --- /dev/null +++ b/armarium_app/arm_env/bin/easy_install-3.5 @@ -0,0 +1,11 @@ +#!"/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python3.5" + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/armarium_app/arm_env/bin/pip b/armarium_app/arm_env/bin/pip new file mode 100755 index 0000000..bb50bb9 --- /dev/null +++ b/armarium_app/arm_env/bin/pip @@ -0,0 +1,11 @@ +#!"/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python3.5" + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/armarium_app/arm_env/bin/pip3 b/armarium_app/arm_env/bin/pip3 new file mode 100755 index 0000000..bb50bb9 --- /dev/null +++ b/armarium_app/arm_env/bin/pip3 @@ -0,0 +1,11 @@ +#!"/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python3.5" + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/armarium_app/arm_env/bin/pip3.5 b/armarium_app/arm_env/bin/pip3.5 new file mode 100755 index 0000000..bb50bb9 --- /dev/null +++ b/armarium_app/arm_env/bin/pip3.5 @@ -0,0 +1,11 @@ +#!"/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python3.5" + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/armarium_app/arm_env/bin/python b/armarium_app/arm_env/bin/python new file mode 120000 index 0000000..f549cea --- /dev/null +++ b/armarium_app/arm_env/bin/python @@ -0,0 +1 @@ +python3.5 \ No newline at end of file diff --git a/armarium_app/arm_env/bin/python-config b/armarium_app/arm_env/bin/python-config new file mode 100755 index 0000000..6cfa140 --- /dev/null +++ b/armarium_app/arm_env/bin/python-config @@ -0,0 +1,78 @@ +#!/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python + +import sys +import getopt +import sysconfig + +valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', + 'ldflags', 'help'] + +if sys.version_info >= (3, 2): + valid_opts.insert(-1, 'extension-suffix') + valid_opts.append('abiflags') +if sys.version_info >= (3, 3): + valid_opts.append('configdir') + + +def exit_with_usage(code=1): + sys.stderr.write("Usage: {0} [{1}]\n".format( + sys.argv[0], '|'.join('--'+opt for opt in valid_opts))) + sys.exit(code) + +try: + opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) +except getopt.error: + exit_with_usage() + +if not opts: + exit_with_usage() + +pyver = sysconfig.get_config_var('VERSION') +getvar = sysconfig.get_config_var + +opt_flags = [flag for (flag, val) in opts] + +if '--help' in opt_flags: + exit_with_usage(code=0) + +for opt in opt_flags: + if opt == '--prefix': + print(sysconfig.get_config_var('prefix')) + + elif opt == '--exec-prefix': + print(sysconfig.get_config_var('exec_prefix')) + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_path('include'), + '-I' + sysconfig.get_path('platinclude')] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print(' '.join(flags)) + + elif opt in ('--libs', '--ldflags'): + abiflags = getattr(sys, 'abiflags', '') + libs = ['-lpython' + pyver + abiflags] + libs += getvar('LIBS').split() + libs += getvar('SYSLIBS').split() + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + if not getvar('PYTHONFRAMEWORK'): + libs.extend(getvar('LINKFORSHARED').split()) + print(' '.join(libs)) + + elif opt == '--extension-suffix': + ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') + if ext_suffix is None: + ext_suffix = sysconfig.get_config_var('SO') + print(ext_suffix) + + elif opt == '--abiflags': + if not getattr(sys, 'abiflags', None): + exit_with_usage() + print(sys.abiflags) + + elif opt == '--configdir': + print(sysconfig.get_config_var('LIBPL')) diff --git a/armarium_app/arm_env/bin/python3 b/armarium_app/arm_env/bin/python3 new file mode 120000 index 0000000..f549cea --- /dev/null +++ b/armarium_app/arm_env/bin/python3 @@ -0,0 +1 @@ +python3.5 \ No newline at end of file diff --git a/armarium_app/arm_env/bin/python3.5 b/armarium_app/arm_env/bin/python3.5 new file mode 100755 index 0000000..c4104e1 Binary files /dev/null and b/armarium_app/arm_env/bin/python3.5 differ diff --git a/armarium_app/arm_env/bin/wheel b/armarium_app/arm_env/bin/wheel new file mode 100755 index 0000000..02913d3 --- /dev/null +++ b/armarium_app/arm_env/bin/wheel @@ -0,0 +1,11 @@ +#!"/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/python3.5" + +# -*- coding: utf-8 -*- +import re +import sys + +from wheel.tool import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/armarium_app/arm_env/include/python3.5m b/armarium_app/arm_env/include/python3.5m new file mode 120000 index 0000000..db56fdf --- /dev/null +++ b/armarium_app/arm_env/include/python3.5m @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/include/python3.5m \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/__future__.py b/armarium_app/arm_env/lib/python3.5/__future__.py new file mode 120000 index 0000000..f94228f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/__future__.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/__future__.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/_bootlocale.py b/armarium_app/arm_env/lib/python3.5/_bootlocale.py new file mode 120000 index 0000000..62523b3 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/_bootlocale.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/_bootlocale.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/_collections_abc.py b/armarium_app/arm_env/lib/python3.5/_collections_abc.py new file mode 120000 index 0000000..80bcb06 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/_collections_abc.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/_collections_abc.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/_dummy_thread.py b/armarium_app/arm_env/lib/python3.5/_dummy_thread.py new file mode 120000 index 0000000..47e03e5 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/_dummy_thread.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/_dummy_thread.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/_weakrefset.py b/armarium_app/arm_env/lib/python3.5/_weakrefset.py new file mode 120000 index 0000000..f3a2dff --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/_weakrefset.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/_weakrefset.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/abc.py b/armarium_app/arm_env/lib/python3.5/abc.py new file mode 120000 index 0000000..73087d6 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/abc.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/abc.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/base64.py b/armarium_app/arm_env/lib/python3.5/base64.py new file mode 120000 index 0000000..1b85a5a --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/base64.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/base64.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/bisect.py b/armarium_app/arm_env/lib/python3.5/bisect.py new file mode 120000 index 0000000..380fde4 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/bisect.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/bisect.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/codecs.py b/armarium_app/arm_env/lib/python3.5/codecs.py new file mode 120000 index 0000000..b9f77a1 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/codecs.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/codecs.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/collections b/armarium_app/arm_env/lib/python3.5/collections new file mode 120000 index 0000000..20a9d1d --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/collections @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/collections \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/config-3.5m b/armarium_app/arm_env/lib/python3.5/config-3.5m new file mode 120000 index 0000000..9b9cb4f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/config-3.5m @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/config-3.5m \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/copy.py b/armarium_app/arm_env/lib/python3.5/copy.py new file mode 120000 index 0000000..02630c9 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/copy.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/copy.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/copyreg.py b/armarium_app/arm_env/lib/python3.5/copyreg.py new file mode 120000 index 0000000..fe52af9 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/copyreg.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/copyreg.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/distutils/__init__.py b/armarium_app/arm_env/lib/python3.5/distutils/__init__.py new file mode 100644 index 0000000..29fc1da --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/distutils/__init__.py @@ -0,0 +1,101 @@ +import os +import sys +import warnings +import imp +import opcode # opcode is not a virtualenv module, so we can use it to find the stdlib + # Important! To work on pypy, this must be a module that resides in the + # lib-python/modified-x.y.z directory + +dirname = os.path.dirname + +distutils_path = os.path.join(os.path.dirname(opcode.__file__), 'distutils') +if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)): + warnings.warn( + "The virtualenv distutils package at %s appears to be in the same location as the system distutils?") +else: + __path__.insert(0, distutils_path) + real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ('', '', imp.PKG_DIRECTORY)) + # Copy the relevant attributes + try: + __revision__ = real_distutils.__revision__ + except AttributeError: + pass + __version__ = real_distutils.__version__ + +from distutils import dist, sysconfig + +try: + basestring +except NameError: + basestring = str + +## patch build_ext (distutils doesn't know how to get the libs directory +## path on windows - it hardcodes the paths around the patched sys.prefix) + +if sys.platform == 'win32': + from distutils.command.build_ext import build_ext as old_build_ext + class build_ext(old_build_ext): + def finalize_options (self): + if self.library_dirs is None: + self.library_dirs = [] + elif isinstance(self.library_dirs, basestring): + self.library_dirs = self.library_dirs.split(os.pathsep) + + self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs")) + old_build_ext.finalize_options(self) + + from distutils.command import build_ext as build_ext_module + build_ext_module.build_ext = build_ext + +## distutils.dist patches: + +old_find_config_files = dist.Distribution.find_config_files +def find_config_files(self): + found = old_find_config_files(self) + system_distutils = os.path.join(distutils_path, 'distutils.cfg') + #if os.path.exists(system_distutils): + # found.insert(0, system_distutils) + # What to call the per-user config file + if os.name == 'posix': + user_filename = ".pydistutils.cfg" + else: + user_filename = "pydistutils.cfg" + user_filename = os.path.join(sys.prefix, user_filename) + if os.path.isfile(user_filename): + for item in list(found): + if item.endswith('pydistutils.cfg'): + found.remove(item) + found.append(user_filename) + return found +dist.Distribution.find_config_files = find_config_files + +## distutils.sysconfig patches: + +old_get_python_inc = sysconfig.get_python_inc +def sysconfig_get_python_inc(plat_specific=0, prefix=None): + if prefix is None: + prefix = sys.real_prefix + return old_get_python_inc(plat_specific, prefix) +sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__ +sysconfig.get_python_inc = sysconfig_get_python_inc + +old_get_python_lib = sysconfig.get_python_lib +def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + if standard_lib and prefix is None: + prefix = sys.real_prefix + return old_get_python_lib(plat_specific, standard_lib, prefix) +sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__ +sysconfig.get_python_lib = sysconfig_get_python_lib + +old_get_config_vars = sysconfig.get_config_vars +def sysconfig_get_config_vars(*args): + real_vars = old_get_config_vars(*args) + if sys.platform == 'win32': + lib_dir = os.path.join(sys.real_prefix, "libs") + if isinstance(real_vars, dict) and 'LIBDIR' not in real_vars: + real_vars['LIBDIR'] = lib_dir # asked for all + elif isinstance(real_vars, list) and 'LIBDIR' in args: + real_vars = real_vars + [lib_dir] # asked for list + return real_vars +sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__ +sysconfig.get_config_vars = sysconfig_get_config_vars diff --git a/armarium_app/arm_env/lib/python3.5/distutils/distutils.cfg b/armarium_app/arm_env/lib/python3.5/distutils/distutils.cfg new file mode 100644 index 0000000..1af230e --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/distutils/distutils.cfg @@ -0,0 +1,6 @@ +# This is a config file local to this virtualenv installation +# You may include options that will be used by all distutils commands, +# and by easy_install. For instance: +# +# [easy_install] +# find_links = http://mylocalsite diff --git a/armarium_app/arm_env/lib/python3.5/encodings b/armarium_app/arm_env/lib/python3.5/encodings new file mode 120000 index 0000000..bddfc0c --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/encodings @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/encodings \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/fnmatch.py b/armarium_app/arm_env/lib/python3.5/fnmatch.py new file mode 120000 index 0000000..8365972 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/fnmatch.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/fnmatch.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/functools.py b/armarium_app/arm_env/lib/python3.5/functools.py new file mode 120000 index 0000000..8d1091c --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/functools.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/functools.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/genericpath.py b/armarium_app/arm_env/lib/python3.5/genericpath.py new file mode 120000 index 0000000..bb942ea --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/genericpath.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/genericpath.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/hashlib.py b/armarium_app/arm_env/lib/python3.5/hashlib.py new file mode 120000 index 0000000..30c2a73 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/hashlib.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/hashlib.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/heapq.py b/armarium_app/arm_env/lib/python3.5/heapq.py new file mode 120000 index 0000000..eb3478e --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/heapq.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/heapq.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/hmac.py b/armarium_app/arm_env/lib/python3.5/hmac.py new file mode 120000 index 0000000..ad3982c --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/hmac.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/hmac.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/imp.py b/armarium_app/arm_env/lib/python3.5/imp.py new file mode 120000 index 0000000..7e073b5 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/imp.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/imp.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/importlib b/armarium_app/arm_env/lib/python3.5/importlib new file mode 120000 index 0000000..caa3994 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/importlib @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/importlib \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/io.py b/armarium_app/arm_env/lib/python3.5/io.py new file mode 120000 index 0000000..1cf3da7 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/io.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/io.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/keyword.py b/armarium_app/arm_env/lib/python3.5/keyword.py new file mode 120000 index 0000000..6a9bbf8 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/keyword.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/keyword.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/lib-dynload b/armarium_app/arm_env/lib/python3.5/lib-dynload new file mode 120000 index 0000000..7884f66 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/lib-dynload @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/linecache.py b/armarium_app/arm_env/lib/python3.5/linecache.py new file mode 120000 index 0000000..9bc95cb --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/linecache.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/linecache.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/locale.py b/armarium_app/arm_env/lib/python3.5/locale.py new file mode 120000 index 0000000..c6e6095 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/locale.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/locale.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/no-global-site-packages.txt b/armarium_app/arm_env/lib/python3.5/no-global-site-packages.txt new file mode 100644 index 0000000..e69de29 diff --git a/armarium_app/arm_env/lib/python3.5/ntpath.py b/armarium_app/arm_env/lib/python3.5/ntpath.py new file mode 120000 index 0000000..1fbcee8 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/ntpath.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ntpath.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/operator.py b/armarium_app/arm_env/lib/python3.5/operator.py new file mode 120000 index 0000000..e19e482 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/operator.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/operator.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/orig-prefix.txt b/armarium_app/arm_env/lib/python3.5/orig-prefix.txt new file mode 100644 index 0000000..20448b6 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/orig-prefix.txt @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5 \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/os.py b/armarium_app/arm_env/lib/python3.5/os.py new file mode 120000 index 0000000..4101e9f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/os.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/os.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/plat-darwin b/armarium_app/arm_env/lib/python3.5/plat-darwin new file mode 120000 index 0000000..4c1ef49 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/plat-darwin @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/posixpath.py b/armarium_app/arm_env/lib/python3.5/posixpath.py new file mode 120000 index 0000000..8bcb554 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/posixpath.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/posixpath.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/random.py b/armarium_app/arm_env/lib/python3.5/random.py new file mode 120000 index 0000000..ede3213 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/random.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/random.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/re.py b/armarium_app/arm_env/lib/python3.5/re.py new file mode 120000 index 0000000..c16226e --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/re.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/re.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/readline.so b/armarium_app/arm_env/lib/python3.5/readline.so new file mode 120000 index 0000000..366ef4a --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/readline.so @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload/readline.cpython-35m-darwin.so \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/reprlib.py b/armarium_app/arm_env/lib/python3.5/reprlib.py new file mode 120000 index 0000000..139b0f3 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/reprlib.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/reprlib.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/rlcompleter.py b/armarium_app/arm_env/lib/python3.5/rlcompleter.py new file mode 120000 index 0000000..08737e6 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/rlcompleter.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/rlcompleter.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/shutil.py b/armarium_app/arm_env/lib/python3.5/shutil.py new file mode 120000 index 0000000..81c77db --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/shutil.py @@ -0,0 +1 @@ +/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/shutil.py \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/_markerlib/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/_markerlib/__init__.py new file mode 100644 index 0000000..e2b237b --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/_markerlib/__init__.py @@ -0,0 +1,16 @@ +try: + import ast + from _markerlib.markers import default_environment, compile, interpret +except ImportError: + if 'ast' in globals(): + raise + def default_environment(): + return {} + def compile(marker): + def marker_fn(environment=None, override=None): + # 'empty markers are True' heuristic won't install extra deps. + return not marker.strip() + marker_fn.__doc__ = marker + return marker_fn + def interpret(marker, environment=None, override=None): + return compile(marker)() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/_markerlib/markers.py b/armarium_app/arm_env/lib/python3.5/site-packages/_markerlib/markers.py new file mode 100644 index 0000000..fa83706 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/_markerlib/markers.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +"""Interpret PEP 345 environment markers. + +EXPR [in|==|!=|not in] EXPR [or|and] ... + +where EXPR belongs to any of those: + + python_version = '%s.%s' % (sys.version_info[0], sys.version_info[1]) + python_full_version = sys.version.split()[0] + os.name = os.name + sys.platform = sys.platform + platform.version = platform.version() + platform.machine = platform.machine() + platform.python_implementation = platform.python_implementation() + a free string, like '2.6', or 'win32' +""" + +__all__ = ['default_environment', 'compile', 'interpret'] + +import ast +import os +import platform +import sys +import weakref + +_builtin_compile = compile + +try: + from platform import python_implementation +except ImportError: + if os.name == "java": + # Jython 2.5 has ast module, but not platform.python_implementation() function. + def python_implementation(): + return "Jython" + else: + raise + + +# restricted set of variables +_VARS = {'sys.platform': sys.platform, + 'python_version': '%s.%s' % sys.version_info[:2], + # FIXME parsing sys.platform is not reliable, but there is no other + # way to get e.g. 2.7.2+, and the PEP is defined with sys.version + 'python_full_version': sys.version.split(' ', 1)[0], + 'os.name': os.name, + 'platform.version': platform.version(), + 'platform.machine': platform.machine(), + 'platform.python_implementation': python_implementation(), + 'extra': None # wheel extension + } + +for var in list(_VARS.keys()): + if '.' in var: + _VARS[var.replace('.', '_')] = _VARS[var] + +def default_environment(): + """Return copy of default PEP 385 globals dictionary.""" + return dict(_VARS) + +class ASTWhitelist(ast.NodeTransformer): + def __init__(self, statement): + self.statement = statement # for error messages + + ALLOWED = (ast.Compare, ast.BoolOp, ast.Attribute, ast.Name, ast.Load, ast.Str) + # Bool operations + ALLOWED += (ast.And, ast.Or) + # Comparison operations + ALLOWED += (ast.Eq, ast.Gt, ast.GtE, ast.In, ast.Is, ast.IsNot, ast.Lt, ast.LtE, ast.NotEq, ast.NotIn) + + def visit(self, node): + """Ensure statement only contains allowed nodes.""" + if not isinstance(node, self.ALLOWED): + raise SyntaxError('Not allowed in environment markers.\n%s\n%s' % + (self.statement, + (' ' * node.col_offset) + '^')) + return ast.NodeTransformer.visit(self, node) + + def visit_Attribute(self, node): + """Flatten one level of attribute access.""" + new_node = ast.Name("%s.%s" % (node.value.id, node.attr), node.ctx) + return ast.copy_location(new_node, node) + +def parse_marker(marker): + tree = ast.parse(marker, mode='eval') + new_tree = ASTWhitelist(marker).generic_visit(tree) + return new_tree + +def compile_marker(parsed_marker): + return _builtin_compile(parsed_marker, '', 'eval', + dont_inherit=True) + +_cache = weakref.WeakValueDictionary() + +def compile(marker): + """Return compiled marker as a function accepting an environment dict.""" + try: + return _cache[marker] + except KeyError: + pass + if not marker.strip(): + def marker_fn(environment=None, override=None): + """""" + return True + else: + compiled_marker = compile_marker(parse_marker(marker)) + def marker_fn(environment=None, override=None): + """override updates environment""" + if override is None: + override = {} + if environment is None: + environment = default_environment() + environment.update(override) + return eval(compiled_marker, environment) + marker_fn.__doc__ = marker + _cache[marker] = marker_fn + return _cache[marker] + +def interpret(marker, environment=None): + return compile(marker)(environment) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/easy_install.py b/armarium_app/arm_env/lib/python3.5/site-packages/easy_install.py new file mode 100644 index 0000000..d87e984 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/DESCRIPTION.rst b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..2c149b7 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/DESCRIPTION.rst @@ -0,0 +1,34 @@ +pip +=== + +The `PyPA recommended +`_ +tool for installing Python packages. + +* `Installation `_ +* `Documentation `_ +* `Changelog `_ +* `Github Page `_ +* `Issue Tracking `_ +* `User mailing list `_ +* `Dev mailing list `_ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.python.org/pypi/pip + +.. image:: https://img.shields.io/travis/pypa/pip/develop.svg + :target: http://travis-ci.org/pypa/pip + + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/INSTALLER b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/METADATA b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/METADATA new file mode 100644 index 0000000..a49cee5 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/METADATA @@ -0,0 +1,62 @@ +Metadata-Version: 2.0 +Name: pip +Version: 8.0.2 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: python-virtualenv@groups.google.com +License: MIT +Keywords: easy_install distutils setuptools egg virtualenv +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Provides-Extra: testing +Requires-Dist: mock; extra == 'testing' +Requires-Dist: pytest; extra == 'testing' +Requires-Dist: scripttest (>=1.3); extra == 'testing' +Requires-Dist: virtualenv (>=1.10); extra == 'testing' + +pip +=== + +The `PyPA recommended +`_ +tool for installing Python packages. + +* `Installation `_ +* `Documentation `_ +* `Changelog `_ +* `Github Page `_ +* `Issue Tracking `_ +* `User mailing list `_ +* `Dev mailing list `_ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.python.org/pypi/pip + +.. image:: https://img.shields.io/travis/pypa/pip/develop.svg + :target: http://travis-ci.org/pypa/pip + + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/RECORD b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/RECORD new file mode 100644 index 0000000..a58398f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/RECORD @@ -0,0 +1,477 @@ +pip/__init__.py,sha256=mPGsfFwpIvtXlWhanTBtjdVYuTc0KNDvb2Tr-gHZBvU,10431 +pip/__main__.py,sha256=V6Kh-IEDEFpt1cahRE6MajUF_14qJR_Qsvn4MjWZXzE,584 +pip/basecommand.py,sha256=Zlg6SE42TIjRyt1mct0LCkgNxcKKnss3xvASJyDqucE,11429 +pip/baseparser.py,sha256=Nlc7Un9gat27xtB24SnKL_3pZZOoh62gNNRdS6tDRZY,10465 +pip/cmdoptions.py,sha256=OJhbVR6zQ8kbbGcnv0RTZyvwvFqzKxtmO4lPYymMBKM,15877 +pip/download.py,sha256=srwSU5WnOa59_TPGaCfEWODDSZSRBJUHgU5jkC467MY,31715 +pip/exceptions.py,sha256=4KrgxMQuOpP8JlWc90S0vsJ_Ch-EBeD026knOgk9U8A,7741 +pip/index.py,sha256=VzgEo93kTlHeoPrlgPDg24h2ly0jzdg92OBjkG--gMg,36776 +pip/locations.py,sha256=MqUzS8YI2wDa7oFzTQw4zM4s0Hci05yubxfU_kTXXlU,5632 +pip/pep425tags.py,sha256=nXeMZN4d3h14oVovpI0WholWCNCR0MD2mAERl3YHs08,7240 +pip/status_codes.py,sha256=F6uDG6Gj7RNKQJUDnd87QKqI16Us-t-B0wPF_4QMpWc,156 +pip/wheel.py,sha256=e3iaG7X6Z6eQvfChzGiZHK4yw12Z_PqLSRCi6_AUf4s,32030 +pip/_vendor/__init__.py,sha256=pdHihfQPLF1y1-0mtHNcBSWoPkoMLCuO-hsKe9BliHY,4095 +pip/_vendor/ipaddress.py,sha256=FngG_V6As8JnDJVR1g1i0D6wVa5ycSKJYOh7IrI4fq0,79904 +pip/_vendor/pyparsing.py,sha256=KQ0nkf46pkGw8RsTy2cdtmxs2yVwa3BkHQ6gGJDiKi0,156250 +pip/_vendor/re-vendor.py,sha256=PcdZ40d0ohMsdJmA4t0AeAWbPXi1tFsvAwA5KE5FGeY,773 +pip/_vendor/retrying.py,sha256=k3fflf5_Mm0XcIJYhB7Tj34bqCCPhUDkYbx1NvW2FPE,9972 +pip/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +pip/_vendor/_markerlib/__init__.py,sha256=2hgtRuYDOrimZF9-ENCkrP8gnJ59HZEtlk-zoTEvn1Y,564 +pip/_vendor/_markerlib/markers.py,sha256=YuFp0-osufFIoqnzG3L0Z2fDCx4Vln3VUDeXJ2DA_1I,3979 +pip/_vendor/cachecontrol/__init__.py,sha256=uz7Oxs9hQmUxtxod1WyVoUj6Jab7NfiLECPHFuc-22U,302 +pip/_vendor/cachecontrol/_cmd.py,sha256=MPxZfZd2LKDzVrs55X3wA1rsI2YuP8evLZSwQj0dIk0,1320 +pip/_vendor/cachecontrol/adapter.py,sha256=eizWWJwOnG5TToxL-XiEywPEf2k20--e-5C6u6wAEts,4196 +pip/_vendor/cachecontrol/cache.py,sha256=xtl-V-pr9KSt9VvFDRCB9yrHPEvqvbk-5M1vAInZb5k,790 +pip/_vendor/cachecontrol/compat.py,sha256=uyovOpd1ehI3J1XeBqJvcsIp6fvkjBpoQmu_0J2st8c,416 +pip/_vendor/cachecontrol/controller.py,sha256=Aky7U9UZ1VqutfvilljlWi1uk40yis6lmaz8c_wQLw8,12996 +pip/_vendor/cachecontrol/filewrapper.py,sha256=jkC0GOorbWIpy9CzP3PwxSHx5J2CXBAxNbGH68HmP1M,2168 +pip/_vendor/cachecontrol/heuristics.py,sha256=WtJrVsyWjpP9WoUiDVdTZZRNBCz5ZVptaQpYnqofDQU,4141 +pip/_vendor/cachecontrol/serialize.py,sha256=vZQ-Rsn4618ATipqqZJ-Hife2qVzpIepNjxTCUM-eAw,6305 +pip/_vendor/cachecontrol/wrapper.py,sha256=Kqyu_3TW_54XDudha4-HF21vyEOAJ4ZnRXFysTiLmXA,498 +pip/_vendor/cachecontrol/caches/__init__.py,sha256=uWnUtyMvHY_LULaL_4_IR1F_xPgK5zHfJyRnBq4DnPE,369 +pip/_vendor/cachecontrol/caches/file_cache.py,sha256=FsDug3bwUAQ3okjjfGzxlDaBf2fwVSn1iBKMTL6SyGU,3532 +pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=XywqxkS9MkCaflTOY_wjrE02neKdywB9YwlOBbP7Ywc,973 +pip/_vendor/colorama/__init__.py,sha256=KHtwPTmdX3-XyE18JUOqRxxnoliw3fXU_12BIAS0zLk,240 +pip/_vendor/colorama/ansi.py,sha256=Fi0un-QLqRm-v7o_nKiOqyC8PapBJK7DLV_q9LKtTO0,2524 +pip/_vendor/colorama/ansitowin32.py,sha256=YOemHWTdCzwAuzZ-S5AdPMtMSC0opO75l8yoTu7Nrkg,9545 +pip/_vendor/colorama/initialise.py,sha256=QTPJjlrrFn_XzRiuDgVUgWiVhDgqEeBrQLLvEv5XGV4,1831 +pip/_vendor/colorama/win32.py,sha256=_SCEoTK_GA2tU1nhbayKKac-v9Jn98lCPIFOeFMGCHQ,5365 +pip/_vendor/colorama/winterm.py,sha256=V7U7ojwG1q4n6PKripjEvW_htYQi5ueXSM3LUUoqqDY,6290 +pip/_vendor/distlib/__init__.py,sha256=iQfvezhw6UAHvpHnVjHTpgihkVdORxsaplTI85GdPgQ,581 +pip/_vendor/distlib/compat.py,sha256=cQpdOl3c94jOx7KQXvDzDjdDaqxzs0kdnGYe5lMspAc,40660 +pip/_vendor/distlib/database.py,sha256=ox41J2cwXW2J0bZvgaKf8dhm3DfuiCR4o1icl5qr9c4,49268 +pip/_vendor/distlib/index.py,sha256=qU38JCRI5F_1Z-QmydiocDE58d4KvHzKjS_T0dBsPlg,20976 +pip/_vendor/distlib/locators.py,sha256=J720MSOYW3l35af3f5IpsUYiz1EgmUxTtMZ0y1Bm3Nk,50347 +pip/_vendor/distlib/manifest.py,sha256=JF5EstaCOPnsW2tUdXCdjIFn-Zkf48Dqw0TcxKjuni0,13598 +pip/_vendor/distlib/markers.py,sha256=iRrVWwpyVwjkKJSX8NEQ92_MRMwpROcfNGKCD-Ch1QM,6282 +pip/_vendor/distlib/metadata.py,sha256=HvsxgUBUdrJe3pnRQCyCVtKrX5GIw0vjPEzvnmC5by0,38314 +pip/_vendor/distlib/resources.py,sha256=oQ58hJM6egiGve0P6UzdSTGvV5Bt8raW_Dla2LCrOWs,10615 +pip/_vendor/distlib/scripts.py,sha256=y5v9QEHw_Z1fLU-ETjU9z_-nQZlKBu49r0meUlj1qp4,14183 +pip/_vendor/distlib/t32.exe,sha256=rOJD6eDYk88TJ5lJtyt58El-nYNip4UvnYIDJ2y6QNs,89088 +pip/_vendor/distlib/t64.exe,sha256=qDBQu9uPHCVdBFM6ANg-Xp9nc5Wz_iFnSmsCTvdEQec,97792 +pip/_vendor/distlib/util.py,sha256=1t4_TO0LcXzgWUQHv4OZrRmD2P-JrxX0TutY08L_11w,51518 +pip/_vendor/distlib/version.py,sha256=GeYZxzA0k6zytPBOC5R6RQiUWRoIR2arUrpwUejRUWo,23711 +pip/_vendor/distlib/w32.exe,sha256=LrnXXqK-Yb1tzS0lxymvQPiMlkQZWAB0eHM5jnL0mAk,85504 +pip/_vendor/distlib/w64.exe,sha256=GbKq4oBmzHZXdcpaLupKLenmQD7_DXsYX8PDPWo_U3M,94208 +pip/_vendor/distlib/wheel.py,sha256=xvaNt5tYH1qI--jo7mG7EQgHM8Gb3CxdWD3bpksy0QM,39043 +pip/_vendor/distlib/_backport/__init__.py,sha256=bqS_dTOH6uW9iGgd0uzfpPjo6vZ4xpPZ7kyfZJ2vNaw,274 +pip/_vendor/distlib/_backport/misc.py,sha256=KWecINdbFNOxSOP1fGF680CJnaC6S4fBRgEtaYTw0ig,971 +pip/_vendor/distlib/_backport/shutil.py,sha256=AUi8718iRoJ9K26mRi-rywtt8Gx7ykvrvbUbZszjfYE,25650 +pip/_vendor/distlib/_backport/sysconfig.cfg,sha256=swZKxq9RY5e9r3PXCrlvQPMsvOdiWZBTHLEbqS8LJLU,2617 +pip/_vendor/distlib/_backport/sysconfig.py,sha256=7WdYP0wbw8izH1eAEGNA-HXUyJrhzIAGK_LniUs4UNI,26958 +pip/_vendor/distlib/_backport/tarfile.py,sha256=bjyTNONZb-YEXrHFLExOSuagtSOoPaONP2UUoxwkAqE,92627 +pip/_vendor/html5lib/__init__.py,sha256=emLYTm9_7OPnOInA9dPc4IIVF7GWA5tpl2H_bLqVoWk,779 +pip/_vendor/html5lib/constants.py,sha256=B5LN2DMP-6lEp9wpON4ecX3Kx01n_cbMjuGd6AteixE,86873 +pip/_vendor/html5lib/html5parser.py,sha256=o9FOrhdLGYOtUhsueAsuXwduydagASvwxJ0lUpGYrYg,117347 +pip/_vendor/html5lib/ihatexml.py,sha256=MT12cVXAKaW-ALUkUeN175HpUP73xK8wAIpPzQ8cgfI,16581 +pip/_vendor/html5lib/inputstream.py,sha256=ss3wjtlObOVoVGWFsBztYdpnUqRaezyJ0sTXfdb4Ly4,31665 +pip/_vendor/html5lib/sanitizer.py,sha256=sbyGySzFzCD_v0JYYSr6sLYVLpO6bpVmRiDMKbFRcCw,17804 +pip/_vendor/html5lib/tokenizer.py,sha256=6Uf8sDUkvNn661bcBSBYUCTfXzSs9EyCTiPcj5PAjYI,76929 +pip/_vendor/html5lib/utils.py,sha256=PSVv1ig9oAZa-DU16DT4cbbggnG7K3qQIkPm6uJKxFg,3267 +pip/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/html5lib/filters/_base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286 +pip/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=fpRLbz6TCe5yXEkGmyMlJ80FekWsTR-sHk3Ano0U9LQ,624 +pip/_vendor/html5lib/filters/inject_meta_charset.py,sha256=xllv1I7unxhcyZTf3LTsv30wh2mAkT7wmTZx7zIhpuY,2746 +pip/_vendor/html5lib/filters/lint.py,sha256=8eJo0SXDcY40OhsNd0Cft36kUXCZ5t-30mNFSUf4LnE,4208 +pip/_vendor/html5lib/filters/optionaltags.py,sha256=4ozLwBgMRaxe7iqxefLQpDhp3irK7YHo9LgSGsvZYMw,10500 +pip/_vendor/html5lib/filters/sanitizer.py,sha256=MvGUs_v2taWPgGhjxswRSUiHfxrqMUhsNPz-eSeUYUQ,352 +pip/_vendor/html5lib/filters/whitespace.py,sha256=LbOUcC0zQ9z703KNZrArOr0kVBO7OMXjKjucDW32LU4,1142 +pip/_vendor/html5lib/serializer/__init__.py,sha256=xFXFP-inaTNlbnau5c5DGrH_O8yPm-C6HWbJxpiSqFE,490 +pip/_vendor/html5lib/serializer/htmlserializer.py,sha256=G-aVHmlR7uMR011jO0ev7sZvkVHpLr3OrLSYMZ7liVs,12855 +pip/_vendor/html5lib/treeadapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/html5lib/treeadapters/sax.py,sha256=3of4vvaUYIAic7pngebwJV24hpOS7Zg9ggJa_WQegy4,1661 +pip/_vendor/html5lib/treebuilders/__init__.py,sha256=Xz4X6B5DA1R-5GyRa44j0sJwfl6dUNyb0NBu9-7sK3U,3405 +pip/_vendor/html5lib/treebuilders/_base.py,sha256=Xf0FZVcVwIQS6tEseJdj5wKbYucbNCnbAsnsG4lONis,13711 +pip/_vendor/html5lib/treebuilders/dom.py,sha256=jvmtvnERtpxXpHvBgiq1FpzAUYAAzoolOTx_DoXwGEI,8469 +pip/_vendor/html5lib/treebuilders/etree.py,sha256=etbO6yQlyV46rWlj9mSyVqQOWrgoHgyJ01Tut4lWZkk,12621 +pip/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=z3Bnfm2MstEEb_lbaAeicl5l-ab6MSQa5Q1ZZreK7Pc,14031 +pip/_vendor/html5lib/treewalkers/__init__.py,sha256=m2-4a5P4dMNlQb26MNIhgj69p6ms1i-JD2HPDr7iTfw,5766 +pip/_vendor/html5lib/treewalkers/_base.py,sha256=9nXtXtgubdWKFlKxhVzWarE0Hiv3T4VC7_Wt9ulVzB0,7014 +pip/_vendor/html5lib/treewalkers/dom.py,sha256=Lb63Nuz8HtgvkuuvSmU5LOyUkEtstH5saPPAg5xN4r8,1421 +pip/_vendor/html5lib/treewalkers/etree.py,sha256=966h5cOYPwQIcHjxJmVP5cDOnWKiyqpyt9QKQo9W-uo,4597 +pip/_vendor/html5lib/treewalkers/genshistream.py,sha256=IbBFrlgi-59-K7P1zm0d7ZFIknBN4c5E57PHJDkx39s,2278 +pip/_vendor/html5lib/treewalkers/lxmletree.py,sha256=am6t_JHh_Fpm10CaW-zDaGGsDwTPK3Pas7TRBezFs4w,5992 +pip/_vendor/html5lib/treewalkers/pulldom.py,sha256=9W6i8yWtUzayV6EwX-okVacttHaqpQZwdBCc2S3XeQ4,2302 +pip/_vendor/html5lib/trie/__init__.py,sha256=mec5zyJ5wIKRM8819gIcIsYQwncg91rEmPwGH1dG3Ho,212 +pip/_vendor/html5lib/trie/_base.py,sha256=WGY8SGptFmx4O0aKLJ54zrIQOoyuvhS0ngA36vAcIcc,927 +pip/_vendor/html5lib/trie/datrie.py,sha256=EQpqSfkZRuTbE-DuhW7xMdVDxdZNZ0CfmnYfHA_3zxM,1178 +pip/_vendor/html5lib/trie/py.py,sha256=wXmQLrZRf4MyWNyg0m3h81m9InhLR7GJ002mIIZh-8o,1775 +pip/_vendor/lockfile/__init__.py,sha256=Tqpz90DwKYfhPsfzVOJl84TL87pdFE5ePNHdXAxs4Tk,9371 +pip/_vendor/lockfile/linklockfile.py,sha256=C7OH3H4GdK68u4FQgp8fkP2kO4fyUTSyj3X6blgfobc,2652 +pip/_vendor/lockfile/mkdirlockfile.py,sha256=e3qgIL-etZMLsS-3ft19iW_8IQ360HNkGOqE3yBKsUw,3096 +pip/_vendor/lockfile/pidlockfile.py,sha256=ukH9uk6NFuxyVmG5QiWw4iKq3fT7MjqUguX95avYPIY,6090 +pip/_vendor/lockfile/sqlitelockfile.py,sha256=o2TMkMRY0iwn-iL1XMRRIFStMUkS4i3ajceeYNntKFg,5506 +pip/_vendor/lockfile/symlinklockfile.py,sha256=ABwXXmvTHvCl5viPblShL3PG-gGsLiT1roAMfDRwhi8,2616 +pip/_vendor/packaging/__about__.py,sha256=Xo0WrF6clBUwxeCJRJ7gzkvuVEzgONKTAEwP9ZHJifs,720 +pip/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +pip/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +pip/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +pip/_vendor/packaging/markers.py,sha256=pmVQ8Si5HNFjTCxRljmOTSt6IiNBvAB2UZhp2AnASvg,7341 +pip/_vendor/packaging/specifiers.py,sha256=hVCcR-48B0NbvAZInPaGLengc2ZD78UCmi7rhcSkPYQ,27825 +pip/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +pip/_vendor/pkg_resources/__init__.py,sha256=wK-1CRMHd_d02MR35ZeK2chkEEgd2dr4YU3CBEQRE-o,108219 +pip/_vendor/progress/__init__.py,sha256=Wn1074LUDZovd4zfoVYojnPBgOc6ctHbQX7rp_p8lRA,3023 +pip/_vendor/progress/bar.py,sha256=YNPJeRrwYVKFO2nyaEwsQjYByamMWTgJMvQO1NpD-AY,2685 +pip/_vendor/progress/counter.py,sha256=kEqA8jWEdwrc6P_9VaRx7bjOHwk9gxl-Q9oVbQ08v5c,1502 +pip/_vendor/progress/helpers.py,sha256=FehfwZTv-5cCfsbcMlvlUkm3xZ0cRhsev6XVpmeTF4c,2854 +pip/_vendor/progress/spinner.py,sha256=iCVtUQbaJUFHTjn1ZLPQLPYeao4lC9aXAa_HxIeUK6k,1314 +pip/_vendor/requests/__init__.py,sha256=GzCmm6OIsjKVbUEMAxbtw4iBIcFj8GRsRi8GX84y6OY,2007 +pip/_vendor/requests/adapters.py,sha256=RqmOfpR96Lfv-GqSa8QEYIn8ZgfKb05nECh94rTQoJQ,17495 +pip/_vendor/requests/api.py,sha256=mZZtHywR0qme1BStj7fKAkHdpg_3FMdDawBsvWV4eh0,5419 +pip/_vendor/requests/auth.py,sha256=iez9OrPDCyE1zFxJMLL8MNw7CLj3id77gJkwNH4OlbU,7550 +pip/_vendor/requests/cacert.pem,sha256=5xzWFRrSP0ZsXiW6emg8UQ_w497lT4qWCv32OO8R1ME,344712 +pip/_vendor/requests/certs.py,sha256=RX5H1cSiB52Hbjh_qv3eMW8hqHEF_r4Qiv_4AwfziuU,613 +pip/_vendor/requests/compat.py,sha256=hq7CKHoykNs8yzKPAJiOkHQJPoNp9A89MufTdhlCniY,1469 +pip/_vendor/requests/cookies.py,sha256=mrrSrRYhxytuLDKrI5cyH5NL4zvpA373YvO7Ant9rxc,17387 +pip/_vendor/requests/exceptions.py,sha256=lyzK5I-zkNCN9zfYGJgkDMvtt3akjw0QUq4q8pYI4wA,2776 +pip/_vendor/requests/hooks.py,sha256=jSdmZjB5oRJ6xmKM3VtqkYkq8oFTwx6gqG9AaUWpAlw,767 +pip/_vendor/requests/models.py,sha256=QQKNAR4bXpt0q2RwKTAraQlyrFJrZN__lvI0bpjPJvw,29277 +pip/_vendor/requests/sessions.py,sha256=PB_4RAr5Mr-CKStD5haAgDVJl7wBQEuShzDAP0JG-Ho,24544 +pip/_vendor/requests/status_codes.py,sha256=2RTAbhP2u3h-26-iyV0SuN1R0LknUTvga3RXwftdLtc,3280 +pip/_vendor/requests/structures.py,sha256=i3yMaaDbl4_gNJKdcK3kDmeSLoo0r59XEIWoc_qtNyo,2977 +pip/_vendor/requests/utils.py,sha256=pH5DwoyZZjwzDW_2OLrm0asDs2b_9mjzafwfm5SfzLQ,21845 +pip/_vendor/requests/packages/__init__.py,sha256=CVheqNRcXIkAi5037RhxeqbAqd0QhrK1o9R9kS2xvuI,1384 +pip/_vendor/requests/packages/chardet/__init__.py,sha256=XuTKCYOR7JwsoHxqZTYH86LVyMDbDI3s1s0W_qoGEBM,1295 +pip/_vendor/requests/packages/chardet/big5freq.py,sha256=D8oTdz-GM7Jg8TsaWJDm65vM_OLHC3xub6qUJ3rOgsQ,82594 +pip/_vendor/requests/packages/chardet/big5prober.py,sha256=XX96C--6WKYW36mL-z7pJSAtc169Z8ZImByCP4pEN9A,1684 +pip/_vendor/requests/packages/chardet/chardetect.py,sha256=f4299UZG6uWd3i3r_N0OdrFj2sA9JFI54PAmDLAFmWA,2504 +pip/_vendor/requests/packages/chardet/chardistribution.py,sha256=cUARQFr1oTLXeJCDQrDRkUP778AvSMzhSCnG8VLCV58,9226 +pip/_vendor/requests/packages/chardet/charsetgroupprober.py,sha256=0lKk7VE516fgMw119tNefFqLOxKfIE9WfdkpIT69OKU,3791 +pip/_vendor/requests/packages/chardet/charsetprober.py,sha256=Z48o2KiOj23FNqYH8FqzhH5m1qdm3rI8DcTm2Yqtklg,1902 +pip/_vendor/requests/packages/chardet/codingstatemachine.py,sha256=E85rYhHVMw9xDEJVgiQhp0OnLGr6i2r8_7QOWMKTH08,2318 +pip/_vendor/requests/packages/chardet/compat.py,sha256=5mm6yrHwef1JEG5OxkPJlSq5lkjLVpEGh3iPgFBkpkM,1157 +pip/_vendor/requests/packages/chardet/constants.py,sha256=-UnY8U7EP7z9fTyd09yq35BEkSFEAUAiv9ohd1DW1s4,1335 +pip/_vendor/requests/packages/chardet/cp949prober.py,sha256=FMvdLyB7fejPXRsTbca7LK1P3RUvvssmjUNyaEfz8zY,1782 +pip/_vendor/requests/packages/chardet/escprober.py,sha256=q5TcQKeVq31WxrW7Sv8yjpZkjEoaHO8S92EJZ9hodys,3187 +pip/_vendor/requests/packages/chardet/escsm.py,sha256=7iljEKN8lXTh8JFXPUSwlibMno6R6ksq4evLxbkzfro,7839 +pip/_vendor/requests/packages/chardet/eucjpprober.py,sha256=5IpfSEjAb7h3hcGMd6dkU80O900C2N6xku28rdYFKuc,3678 +pip/_vendor/requests/packages/chardet/euckrfreq.py,sha256=T5saK5mImySG5ygQPtsp6o2uKulouCwYm2ElOyFkJqU,45978 +pip/_vendor/requests/packages/chardet/euckrprober.py,sha256=Wo7dnZ5Erw_nB4H-m5alMiOxOuJUmGHlwCSaGqExDZA,1675 +pip/_vendor/requests/packages/chardet/euctwfreq.py,sha256=G_I0BW9i1w0ONeeUwIYqV7_U09buIHdqh-wNHVaql7I,34872 +pip/_vendor/requests/packages/chardet/euctwprober.py,sha256=upS2P6GuT5ujOxXYw-RJLcT7A4PTuo27KGUKU4UZpIQ,1676 +pip/_vendor/requests/packages/chardet/gb2312freq.py,sha256=M2gFdo_qQ_BslStEchrPW5CrPEZEacC0uyDLw4ok-kY,36011 +pip/_vendor/requests/packages/chardet/gb2312prober.py,sha256=VWnjoRa83Y6V6oczMaxyUr0uy48iCnC2nzk9zfEIRHc,1681 +pip/_vendor/requests/packages/chardet/hebrewprober.py,sha256=8pdoUfsVXf_L4BnJde_BewS6H2yInV5688eu0nFhLHY,13359 +pip/_vendor/requests/packages/chardet/jisfreq.py,sha256=ZcL4R5ekHHbP2KCYGakVMBsiKqZZZAABzhwi-uRkOps,47315 +pip/_vendor/requests/packages/chardet/jpcntx.py,sha256=yftmp0QaF6RJO5SJs8I7LU5AF4rwP23ebeCQL4BM1OY,19348 +pip/_vendor/requests/packages/chardet/langbulgarianmodel.py,sha256=ZyPsA796MSVhYdfWhMCgKWckupAKAnKqWcE3Cl3ej6o,12784 +pip/_vendor/requests/packages/chardet/langcyrillicmodel.py,sha256=fkcd5OvogUp-GrNDWAZPgkYsSRCD2omotAEvqjlmLKE,17725 +pip/_vendor/requests/packages/chardet/langgreekmodel.py,sha256=QHMy31CH_ot67UCtmurCEKqKx2WwoaKrw2YCYYBK2Lw,12628 +pip/_vendor/requests/packages/chardet/langhebrewmodel.py,sha256=4ASl5vzKJPng4H278VHKtRYC03TpQpenlHTcsmZH1rE,11318 +pip/_vendor/requests/packages/chardet/langhungarianmodel.py,sha256=SXwuUzh49_cBeMXhshRHdrhlkz0T8_pZWV_pdqBKNFk,12536 +pip/_vendor/requests/packages/chardet/langthaimodel.py,sha256=-k7djh3dGKngAGnt3WfuoJN7acDcWcmHAPojhaUd7q4,11275 +pip/_vendor/requests/packages/chardet/latin1prober.py,sha256=238JHOxH8aRudJY2NmeSv5s7i0Qe3GuklIU3HlYybvg,5232 +pip/_vendor/requests/packages/chardet/mbcharsetprober.py,sha256=9rOCjDVsmSMp6e7q2syqak22j7lrbUZhJhMee2gbVL0,3268 +pip/_vendor/requests/packages/chardet/mbcsgroupprober.py,sha256=SHRzNPLpDXfMJLA8phCHVU0WgqbgDCNxDQMolGX_7yk,1967 +pip/_vendor/requests/packages/chardet/mbcssm.py,sha256=IKwJXyxu34n6NojmxVxC60MLFtJKm-hIfxaFEnb3uBA,19590 +pip/_vendor/requests/packages/chardet/sbcharsetprober.py,sha256=Xq0lODqJnDgxglBiQI4BqTFiPbn63-0a5XNA5-hVu7U,4793 +pip/_vendor/requests/packages/chardet/sbcsgroupprober.py,sha256=8hLyH8RAG-aohBo7o_KciWVgRo42ZE_zEtuNG1JMRYI,3291 +pip/_vendor/requests/packages/chardet/sjisprober.py,sha256=UYOmiMDzttYIkSDoOB08UEagivJpUXz4tuWiWzTiOr8,3764 +pip/_vendor/requests/packages/chardet/universaldetector.py,sha256=h-E2x6XSCzlNjycYWG0Fe4Cf1SGdaIzUNu2HCphpMZA,6840 +pip/_vendor/requests/packages/chardet/utf8prober.py,sha256=7tdNZGrJY7jZUBD483GGMkiP0Tx8Fp-cGvWHoAsilHg,2652 +pip/_vendor/requests/packages/urllib3/__init__.py,sha256=416Z27e3riIyAXRLwsOS5dMrU2EQB361eLxksZFWnrU,2648 +pip/_vendor/requests/packages/urllib3/_collections.py,sha256=8G9PhO4XdkNDQATNL1uy86tSlH3EvIJHXebiOJnfFok,10542 +pip/_vendor/requests/packages/urllib3/connection.py,sha256=XREoqqZh54Lgag5CLdVlC27bwCpOq0aYrMmNEMtSJWk,10286 +pip/_vendor/requests/packages/urllib3/connectionpool.py,sha256=Zzn84qmJhMaSWXqDjhA1WBzt9E_wg3XXi0fsJ80aVPE,31221 +pip/_vendor/requests/packages/urllib3/exceptions.py,sha256=O_rlqjhV5PJFr28ZFW4Y0kgf_Q_l84sRx7ufgBsVEG8,5440 +pip/_vendor/requests/packages/urllib3/fields.py,sha256=WVUvPfSzNBniw9zKVDoLl9y5ko2qKBjbzkH-bTQMSgQ,5872 +pip/_vendor/requests/packages/urllib3/filepost.py,sha256=NvLlFsdt8ih_Q4S2ekQF3CJG0nOXs32YI-G04_AdT2g,2320 +pip/_vendor/requests/packages/urllib3/poolmanager.py,sha256=3KaeL_tJpPPRmnSZY9x8qHcf9SNT8QucwPUNBnqCUx4,9470 +pip/_vendor/requests/packages/urllib3/request.py,sha256=jET7OvA3FSjxABBRGhCyMdPvM9XuJA6df9gRhkJiJiY,5988 +pip/_vendor/requests/packages/urllib3/response.py,sha256=6Bs5LNzhW1YEEd6stBFJtruDVFMlWNxo0MFPmtJhvDU,18103 +pip/_vendor/requests/packages/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/requests/packages/urllib3/contrib/appengine.py,sha256=ewIhezCrySj0r1SCTm8MtpnlE6EFJpEQ-AZhNjXe6dE,7531 +pip/_vendor/requests/packages/urllib3/contrib/ntlmpool.py,sha256=EDJwycyalpMD89DiGF5pFNCZOGTBQBZDtLN8oOAialc,4546 +pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py,sha256=JBL3GO8YucHXkdpU7uxUGd9UgShsIhAU8oCMJDOo47s,10094 +pip/_vendor/requests/packages/urllib3/packages/__init__.py,sha256=nlChrGzkjCkmhCX9HrF_qHPUgosfsPQkVIJxiiLhk9g,109 +pip/_vendor/requests/packages/urllib3/packages/ordered_dict.py,sha256=VQaPONfhVMsb8B63Xg7ZOydJqIE_jzeMhVN3Pec6ogw,8935 +pip/_vendor/requests/packages/urllib3/packages/six.py,sha256=U-rO-WBrFS8PxHeamSl6okKCjqPF18NhiZb0qPZ67XM,11628 +pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py,sha256=cOWMIn1orgJoA35p6pSzO_-Dc6iOX9Dhl6D2sL9b_2o,460 +pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py,sha256=fK28k37hL7-D79v9iM2fHgNK9Q1Pw0M7qVRL4rkfFjQ,3778 +pip/_vendor/requests/packages/urllib3/util/__init__.py,sha256=7LnyUDyddbD9VVmsbPP0ckT2paVTmgLPs5E_BUoHVu8,854 +pip/_vendor/requests/packages/urllib3/util/connection.py,sha256=6PvDBlK_6QDLHzEDT-uEMhqKcDoSuRO43Vtb4IXfkzQ,3380 +pip/_vendor/requests/packages/urllib3/util/request.py,sha256=ZMDewRK-mjlK72szGIIjzYnLIn-zPP0WgJUMjKeZ6Tg,2128 +pip/_vendor/requests/packages/urllib3/util/response.py,sha256=-vdS4K9hXQAkcvFLgnZqNmah_yyH7NZ2I6gRaKX2EwU,2167 +pip/_vendor/requests/packages/urllib3/util/retry.py,sha256=Q4IdYYD3JwjNvc49r7tGsZt7jB6nVkRBohHpvSlONY4,9981 +pip/_vendor/requests/packages/urllib3/util/ssl_.py,sha256=Rq7M8Y04fwHjA9EkewYXE2SE5ZK7UGZhnhZ5JledWh0,11401 +pip/_vendor/requests/packages/urllib3/util/timeout.py,sha256=ioAIYptFyBG7eU_r8_ZmO45hpj1dJE6WCvrGR9dNFjs,9596 +pip/_vendor/requests/packages/urllib3/util/url.py,sha256=EcX4ZfmgKWcqM4sY9FlC-yN4y_snuURPV0TpUPHNjnc,5879 +pip/commands/__init__.py,sha256=BSfOTIkMIBWElsuWJ_uAuCmDQS8b-OHYiyOkk77tWSU,2215 +pip/commands/completion.py,sha256=7JkLif3DF0QGpjMaUjHvF8knJ3IumcED2gWRvMRpFy0,1991 +pip/commands/download.py,sha256=dMRtH0JMBhNGlJWr1qC29vOeiBzG2K0OjOAfzdxSVgA,4804 +pip/commands/freeze.py,sha256=_wHnuHYXC4V0zBLD7LfDhgI_bWL6KdcCgzzQ9bXwDkU,2330 +pip/commands/hash.py,sha256=MCt4jEFyfoce0lVeNEz1x49uaTY-VDkKiBvvxrVcHkw,1597 +pip/commands/help.py,sha256=84HWkEdnGP_AEBHnn8gJP2Te0XTXRKFoXqXopbOZTNo,982 +pip/commands/install.py,sha256=8MOsH3IlL3ovZhTQtZwHhJb19pnkr8eKNE_9klVJ3PU,14971 +pip/commands/list.py,sha256=u76U5TLODQ2g53sSUA4q6WhYus7usbuWuITQJsCnP3E,7412 +pip/commands/search.py,sha256=dJe9rcam1TEfNp9-Gi36WjHc3l4mdj8gheVjqK5BrR0,4605 +pip/commands/show.py,sha256=yxghAwGYaYphL2LJdJbYXVLFr8tBMHnuH8n8s2fWMr4,4903 +pip/commands/uninstall.py,sha256=tz8cXz4WdpUdnt3RvpdQwH6_SNMB50egBIZWa1dwfcc,2884 +pip/commands/wheel.py,sha256=iT92Uo8qpVILl_Yk8L7AtkFVYGmY0ep5oDeyQSpwkLs,7528 +pip/compat/__init__.py,sha256=-k3m7JYe8ztMz2GGCPMc-XK7Uo-RiLdV00dSxWKMjfg,4536 +pip/compat/dictconfig.py,sha256=dRrelPDWrceDSzFT51RTEVY2GuM7UDyc5Igh_tn4Fvk,23096 +pip/models/__init__.py,sha256=0Rs7_RA4DxeOkWT5Cq4CQzDrSEhvYcN3TH2cazr72PE,71 +pip/models/index.py,sha256=pUfbO__v3mD9j-2n_ClwPS8pVyx4l2wIwyvWt8GMCRA,487 +pip/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/operations/freeze.py,sha256=Px8en5guEfc6mhYh0cATtT6tlFzqTzLj4ad8gqAkIqw,3925 +pip/req/__init__.py,sha256=vFwZY8_Vc1WU1zFAespg1My_r_AT3n7cN0W9eX0EFqk,276 +pip/req/req_file.py,sha256=h1YmFfD7Opb_ulTTyEp7Osv2d8gbQJ1KGWMptEl_S08,11764 +pip/req/req_install.py,sha256=DYLV95E3U81nRJy4q8qs0fozLiCQZbG8Yg-CbUTwA2w,46670 +pip/req/req_set.py,sha256=0ncBet1v7gbsKeTUPpBj_-6Kowxx-iskw0_kLMGObi4,32236 +pip/req/req_uninstall.py,sha256=fdH2VgCjEC8NRYDS7fRu3ZJaBBUEy-N5muwxDX5MBNM,6897 +pip/utils/__init__.py,sha256=e629dR1ocvXrv-MCWFhNFGkyYe1pi_DVucXkj6tf_qE,26034 +pip/utils/appdirs.py,sha256=KTpZANfjYw5K2tZ0_jNNdP_kMxQAns79qZWelwaJo0c,7896 +pip/utils/build.py,sha256=4smLRrfSCmXmjEnVnMFh2tBEpNcSLRe6J0ejZJ-wWJE,1312 +pip/utils/deprecation.py,sha256=0y-RdGVpnt-_byop0WJOOb509f8jjOzSmKghHorTclU,2282 +pip/utils/filesystem.py,sha256=ZEVBuYM3fqr2_lgOESh4Y7fPFszGD474zVm_M3Mb5Tk,899 +pip/utils/hashes.py,sha256=oMk7cd3PbJgzpSQyXq1MytMud5f6H5Oa2YY5hYuCq6I,2866 +pip/utils/logging.py,sha256=7yWu4gZw-Qclj7X80QVdpGWkdTWGKT4LiUVKcE04pro,3327 +pip/utils/outdated.py,sha256=fNwOCL5r2EftPGhgCYGMKu032HC8cV-JAr9lp0HmToM,5455 +pip/utils/setuptools_build.py,sha256=8IGop-SZ6lxUl5HMOjLRaDlORPugIH_b_b2Y67x4jQc,240 +pip/utils/ui.py,sha256=fY7lHmQg3Pdnsgkge2mpZMNU9e1jg6unYYs2Ryfulhk,11320 +pip/vcs/__init__.py,sha256=lnea41zMq9HqB1Qo7hxy2IjUzk5WtBvnoloCCMR6Vk4,12349 +pip/vcs/bazaar.py,sha256=tYTwc4b4off8mr0O2o8SiGejqBDJxcbDBMSMd9-ISYc,3803 +pip/vcs/git.py,sha256=jN3vZCn1DqE-RdKGfMqlDhObZ3WFjC21dEav29M62xI,10054 +pip/vcs/mercurial.py,sha256=xG6rDiwHCRytJEs23SIHBXl_SwQo2jkkdD_6rVVP5h4,3472 +pip/vcs/subversion.py,sha256=mGT7sAzuVc1u-9MPoXJNyShnRzhdJpDdGNuhhzUPv6w,8687 +pip-8.0.2.dist-info/DESCRIPTION.rst,sha256=_rptqJIyCNNmh7m8q-4qZfQDc9gqAjMxVITAEfItc08,1060 +pip-8.0.2.dist-info/METADATA,sha256=0KwLFgIzCAQ506gjLJ_VyrUxbw2NC8b-kUbTM8Uo42Y,2212 +pip-8.0.2.dist-info/RECORD,, +pip-8.0.2.dist-info/WHEEL,sha256=GrqQvamwgBV4nLoJe0vhYRSWzWsx7xjlt74FT0SWYfE,110 +pip-8.0.2.dist-info/entry_points.txt,sha256=GWc-Wb9WUKZ1EuVWNz-G0l3BeIpbNJLx0OJbZ61AAV0,68 +pip-8.0.2.dist-info/metadata.json,sha256=k1kwc5oBCmYLNxv77K57H9rt1RW2N6hntsncXVjn2aM,1491 +pip-8.0.2.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/pip,sha256=4g3XpzrDe2ss4yORMUGAfay9uWw2FJ7xj9ZLT6omk-g,273 +/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/pip3,sha256=4g3XpzrDe2ss4yORMUGAfay9uWw2FJ7xj9ZLT6omk-g,273 +/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/bin/pip3.5,sha256=4g3XpzrDe2ss4yORMUGAfay9uWw2FJ7xj9ZLT6omk-g,273 +/Users/Jordan/Desktop/Spring 2016/Final Project/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/_vendor/requests/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/markers.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/compat.cpython-35.pyc,, +pip/_vendor/_markerlib/__pycache__/markers.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/lxmletree.cpython-35.pyc,, +pip/_vendor/colorama/__pycache__/winterm.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/packages/__pycache__/ordered_dict.cpython-35.pyc,, +pip/utils/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/euctwfreq.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/compat.cpython-35.pyc,, +pip/operations/__pycache__/freeze.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/_base.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/tokenizer.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/response.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/langbulgarianmodel.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/lint.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/_collections.cpython-35.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/gb2312freq.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/hebrewprober.cpython-35.pyc,, +pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-35.pyc,, +pip/commands/__pycache__/install.cpython-35.pyc,, +pip/__pycache__/__init__.cpython-35.pyc,, +pip/commands/__pycache__/show.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/version.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/pulldom.cpython-35.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-35.pyc,, +pip/commands/__pycache__/help.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/metadata.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/euctwprober.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/sbcharsetprober.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/connection.cpython-35.pyc,, +pip/vcs/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/progress/__pycache__/counter.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/connection.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/langthaimodel.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/langhungarianmodel.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/sbcsgroupprober.cpython-35.pyc,, +pip/_vendor/html5lib/serializer/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-35.pyc,, +pip/_vendor/html5lib/trie/__pycache__/py.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/jpcntx.cpython-35.pyc,, +pip/_vendor/progress/__pycache__/bar.cpython-35.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-35.pyc,, +pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/big5freq.cpython-35.pyc,, +pip/utils/__pycache__/logging.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/locators.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/chardistribution.cpython-35.pyc,, +pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-35.pyc,, +pip/commands/__pycache__/search.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/charsetgroupprober.cpython-35.pyc,, +pip/__pycache__/download.cpython-35.pyc,, +pip/_vendor/colorama/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/compat.cpython-35.pyc,, +pip/_vendor/colorama/__pycache__/ansi.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/euckrprober.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/cp949prober.cpython-35.pyc,, +pip/_vendor/__pycache__/six.cpython-35.pyc,, +pip/__pycache__/baseparser.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/retry.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/connectionpool.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/filepost.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/response.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/__init__.cpython-35.pyc,, +pip/req/__pycache__/req_uninstall.cpython-35.pyc,, +pip/_vendor/colorama/__pycache__/ansitowin32.cpython-35.pyc,, +pip/_vendor/requests/packages/__pycache__/__init__.cpython-35.pyc,, +pip/req/__pycache__/req_set.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/gb2312prober.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/langhebrewmodel.cpython-35.pyc,, +pip/_vendor/__pycache__/re-vendor.cpython-35.pyc,, +pip/_vendor/html5lib/trie/__pycache__/datrie.cpython-35.pyc,, +pip/commands/__pycache__/hash.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/contrib/__pycache__/pyopenssl.cpython-35.pyc,, +pip/_vendor/progress/__pycache__/__init__.cpython-35.pyc,, +pip/__pycache__/cmdoptions.cpython-35.pyc,, +pip/utils/__pycache__/ui.cpython-35.pyc,, +pip/vcs/__pycache__/git.cpython-35.pyc,, +pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/certs.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/big5prober.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/langcyrillicmodel.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/chardetect.cpython-35.pyc,, +pip/req/__pycache__/req_install.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-35.pyc,, +pip/_vendor/html5lib/trie/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-35.pyc,, +pip/utils/__pycache__/filesystem.cpython-35.pyc,, +pip/utils/__pycache__/build.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/sanitizer.cpython-35.pyc,, +pip/__pycache__/status_codes.cpython-35.pyc,, +pip/__pycache__/index.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-35.pyc,, +pip/_vendor/lockfile/__pycache__/linklockfile.cpython-35.pyc,, +pip/_vendor/progress/__pycache__/helpers.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/url.cpython-35.pyc,, +pip/vcs/__pycache__/bazaar.cpython-35.pyc,, +pip/_vendor/progress/__pycache__/spinner.cpython-35.pyc,, +pip/operations/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/resources.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/specifiers.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/api.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/cache.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/structures.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/index.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/mbcssm.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/markers.cpython-35.pyc,, +pip/vcs/__pycache__/mercurial.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/_base.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/mbcharsetprober.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/contrib/__pycache__/appengine.cpython-35.pyc,, +pip/__pycache__/pep425tags.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/langgreekmodel.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/contrib/__pycache__/ntlmpool.cpython-35.pyc,, +pip/utils/__pycache__/setuptools_build.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/database.cpython-35.pyc,, +pip/commands/__pycache__/completion.cpython-35.pyc,, +pip/__pycache__/__main__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/codingstatemachine.cpython-35.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/utils.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/timeout.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/fields.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/wheel.cpython-35.pyc,, +pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/mbcsgroupprober.cpython-35.pyc,, +pip/utils/__pycache__/deprecation.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/eucjpprober.cpython-35.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/_base.cpython-35.pyc,, +pip/_vendor/html5lib/trie/__pycache__/_base.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/universaldetector.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/adapters.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/auth.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/packages/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/sjisprober.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/sessions.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-35.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/ssl_.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/version.cpython-35.pyc,, +pip/commands/__pycache__/download.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/adapter.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/cookies.cpython-35.pyc,, +pip/_vendor/__pycache__/retrying.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/contrib/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/__about__.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/_compat.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/distlib/_backport/__pycache__/misc.cpython-35.pyc,, +pip/_vendor/packaging/__pycache__/_structures.cpython-35.pyc,, +pip/_vendor/__pycache__/ipaddress.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/scripts.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/constants.cpython-35.pyc,, +pip/models/__pycache__/index.cpython-35.pyc,, +pip/_vendor/__pycache__/pyparsing.cpython-35.pyc,, +pip/commands/__pycache__/freeze.cpython-35.pyc,, +pip/__pycache__/wheel.cpython-35.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/status_codes.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/ihatexml.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/manifest.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/controller.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-35.pyc,, +pip/_vendor/_markerlib/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/utf8prober.cpython-35.pyc,, +pip/_vendor/colorama/__pycache__/win32.cpython-35.pyc,, +pip/utils/__pycache__/outdated.cpython-35.pyc,, +pip/__pycache__/basecommand.cpython-35.pyc,, +pip/utils/__pycache__/appdirs.cpython-35.pyc,, +pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-35.pyc,, +pip/compat/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/constants.cpython-35.pyc,, +pip/models/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/jisfreq.cpython-35.pyc,, +pip/_vendor/colorama/__pycache__/initialise.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/__init__.cpython-35.pyc,, +pip/utils/__pycache__/hashes.cpython-35.pyc,, +pip/commands/__pycache__/uninstall.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/inputstream.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/packages/__pycache__/six.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/poolmanager.cpython-35.pyc,, +pip/_vendor/html5lib/serializer/__pycache__/htmlserializer.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/serialize.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/compat.cpython-35.pyc,, +pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/hooks.cpython-35.pyc,, +pip/_vendor/distlib/__pycache__/util.cpython-35.pyc,, +pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/models.cpython-35.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-35.pyc,, +pip/_vendor/lockfile/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-35.pyc,, +pip/__pycache__/locations.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/exceptions.cpython-35.pyc,, +pip/commands/__pycache__/list.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/util/__pycache__/request.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/escprober.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/utils.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/escsm.cpython-35.pyc,, +pip/req/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/genshistream.cpython-35.pyc,, +pip/commands/__pycache__/__init__.cpython-35.pyc,, +pip/compat/__pycache__/dictconfig.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/charsetprober.cpython-35.pyc,, +pip/_vendor/pkg_resources/__pycache__/__init__.cpython-35.pyc,, +pip/vcs/__pycache__/subversion.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/euckrfreq.cpython-35.pyc,, +pip/_vendor/requests/__pycache__/exceptions.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-35.pyc,, +pip/_vendor/html5lib/__pycache__/html5parser.cpython-35.pyc,, +pip/commands/__pycache__/wheel.cpython-35.pyc,, +pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/__init__.cpython-35.pyc,, +pip/_vendor/requests/packages/chardet/__pycache__/latin1prober.cpython-35.pyc,, +pip/__pycache__/exceptions.cpython-35.pyc,, +pip/req/__pycache__/req_file.cpython-35.pyc,, +pip/_vendor/requests/packages/urllib3/__pycache__/request.cpython-35.pyc,, diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/WHEEL b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/WHEEL new file mode 100644 index 0000000..0de529b --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.26.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/entry_points.txt b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/entry_points.txt new file mode 100644 index 0000000..c02a8d5 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip:main +pip3 = pip:main +pip3.5 = pip:main + diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/metadata.json b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/metadata.json new file mode 100644 index 0000000..79e7d28 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/metadata.json @@ -0,0 +1 @@ +{"generator": "bdist_wheel (0.26.0)", "summary": "The PyPA recommended tool for installing Python packages.", "classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Build Tools", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: PyPy"], "extensions": {"python.details": {"project_urls": {"Home": "https://pip.pypa.io/"}, "contacts": [{"email": "python-virtualenv@groups.google.com", "name": "The pip developers", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}}, "python.exports": {"console_scripts": {"pip": "pip:main", "pip3": "pip:main", "pip3.5": "pip:main"}}, "python.commands": {"wrap_console": {"pip": "pip:main", "pip3": "pip:main", "pip3.5": "pip:main"}}}, "keywords": ["easy_install", "distutils", "setuptools", "egg", "virtualenv"], "license": "MIT", "metadata_version": "2.0", "name": "pip", "extras": ["testing"], "run_requires": [{"requires": ["mock", "pytest", "scripttest (>=1.3)", "virtualenv (>=1.10)"], "extra": "testing"}], "version": "8.0.2", "test_requires": [{"requires": ["mock", "pytest", "scripttest (>=1.3)", "virtualenv (>=1.10)"]}]} \ No newline at end of file diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/top_level.txt b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/top_level.txt new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip-8.0.2.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/__init__.py new file mode 100644 index 0000000..0603ca1 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/__init__.py @@ -0,0 +1,315 @@ +#!/usr/bin/env python +from __future__ import absolute_import + +import logging +import os +import optparse +import warnings + +import sys +import re + +from pip.exceptions import InstallationError, CommandError, PipError +from pip.utils import get_installed_distributions, get_prog +from pip.utils import deprecation, dist_is_editable +from pip.vcs import git, mercurial, subversion, bazaar # noqa +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.commands import get_summaries, get_similar_commands +from pip.commands import commands_dict +from pip._vendor.requests.packages.urllib3.exceptions import ( + InsecureRequestWarning, +) + + +# assignment for flake8 to be happy + +# This fixes a peculiarity when importing via __import__ - as we are +# initialising the pip module, "from pip import cmdoptions" is recursive +# and appears not to work properly in that situation. +import pip.cmdoptions +cmdoptions = pip.cmdoptions + +# The version as used in the setup.py and the docs conf.py +__version__ = "8.0.2" + + +logger = logging.getLogger(__name__) + +# Hide the InsecureRequestWArning from urllib3 +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +def autocomplete(): + """Command and option completion for the main option parser (and options) + and its subcommands (and options). + + Enable by sourcing one of the completion shell scripts (bash or zsh). + """ + # Don't complete if user hasn't sourced bash_completion file. + if 'PIP_AUTO_COMPLETE' not in os.environ: + return + cwords = os.environ['COMP_WORDS'].split()[1:] + cword = int(os.environ['COMP_CWORD']) + try: + current = cwords[cword - 1] + except IndexError: + current = '' + + subcommands = [cmd for cmd, summary in get_summaries()] + options = [] + # subcommand + try: + subcommand_name = [w for w in cwords if w in subcommands][0] + except IndexError: + subcommand_name = None + + parser = create_main_parser() + # subcommand options + if subcommand_name: + # special case: 'help' subcommand has no options + if subcommand_name == 'help': + sys.exit(1) + # special case: list locally installed dists for uninstall command + if subcommand_name == 'uninstall' and not current.startswith('-'): + installed = [] + lc = current.lower() + for dist in get_installed_distributions(local_only=True): + if dist.key.startswith(lc) and dist.key not in cwords[1:]: + installed.append(dist.key) + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + subcommand = commands_dict[subcommand_name]() + options += [(opt.get_opt_string(), opt.nargs) + for opt in subcommand.parser.option_list_all + if opt.help != optparse.SUPPRESS_HELP] + + # filter out previously specified options from available options + prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1]: + opt_label += '=' + print(opt_label) + else: + # show main parser options only when necessary + if current.startswith('-') or current.startswith('--'): + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + opts = (o for it in opts for o in it) + + subcommands += [i.get_opt_string() for i in opts + if i.help != optparse.SUPPRESS_HELP] + + print(' '.join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def create_main_parser(): + parser_kw = { + 'usage': '\n%prog [options]', + 'add_help_option': False, + 'formatter': UpdatingDefaultsHelpFormatter(), + 'name': 'global', + 'prog': get_prog(), + } + + parser = ConfigOptionParser(**parser_kw) + parser.disable_interspersed_args() + + pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + parser.version = 'pip %s from %s (python %s)' % ( + __version__, pip_pkg_dir, sys.version[:3]) + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + parser.main = True # so the help formatter knows + + # create command listing for description + command_summaries = get_summaries() + description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] + parser.description = '\n'.join(description) + + return parser + + +def parseopts(args): + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this + # call is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --version + if general_options.version: + sys.stdout.write(parser.version) + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == 'help' and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0] + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args + + +def check_isolated(args): + isolated = False + + if "--isolated" in args: + isolated = True + + return isolated + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # Enable our Deprecation Warnings + for deprecation_warning in deprecation.DEPRECATIONS: + warnings.simplefilter("default", deprecation_warning) + + # Configure our deprecation warnings to be sent through loggers + deprecation.install_warning_logger() + + autocomplete() + + try: + cmd_name, cmd_args = parseopts(args) + except PipError as exc: + sys.stderr.write("ERROR: %s" % exc) + sys.stderr.write(os.linesep) + sys.exit(1) + + command = commands_dict[cmd_name](isolated=check_isolated(cmd_args)) + return command.main(cmd_args) + + +# ########################################################### +# # Writing freeze files + +class FrozenRequirement(object): + + def __init__(self, name, req, editable, comments=()): + self.name = name + self.req = req + self.editable = editable + self.comments = comments + + _rev_re = re.compile(r'-r(\d+)$') + _date_re = re.compile(r'-(20\d\d\d\d\d\d)$') + + @classmethod + def from_dist(cls, dist, dependency_links): + location = os.path.normcase(os.path.abspath(dist.location)) + comments = [] + from pip.vcs import vcs, get_src_requirement + if dist_is_editable(dist) and vcs.get_backend_name(location): + editable = True + try: + req = get_src_requirement(dist, location) + except InstallationError as exc: + logger.warning( + "Error when trying to get requirement for VCS system %s, " + "falling back to uneditable format", exc + ) + req = None + if req is None: + logger.warning( + 'Could not determine repository location of %s', location + ) + comments.append( + '## !! Could not determine repository location' + ) + req = dist.as_requirement() + editable = False + else: + editable = False + req = dist.as_requirement() + specs = req.specs + assert len(specs) == 1 and specs[0][0] in ["==", "==="], \ + 'Expected 1 spec with == or ===; specs = %r; dist = %r' % \ + (specs, dist) + version = specs[0][1] + ver_match = cls._rev_re.search(version) + date_match = cls._date_re.search(version) + if ver_match or date_match: + svn_backend = vcs.get_backend('svn') + if svn_backend: + svn_location = svn_backend().get_location( + dist, + dependency_links, + ) + if not svn_location: + logger.warning( + 'Warning: cannot find svn location for %s', req) + comments.append( + '## FIXME: could not find svn URL in dependency_links ' + 'for this package:' + ) + else: + comments.append( + '# Installing as editable to satisfy requirement %s:' % + req + ) + if ver_match: + rev = ver_match.group(1) + else: + rev = '{%s}' % date_match.group(1) + editable = True + req = '%s@%s#egg=%s' % ( + svn_location, + rev, + cls.egg_name(dist) + ) + return cls(dist.project_name, req, editable, comments) + + @staticmethod + def egg_name(dist): + name = dist.egg_name() + match = re.search(r'-py\d\.\d$', name) + if match: + name = name[:match.start()] + return name + + def __str__(self): + req = self.req + if self.editable: + req = '-e %s' % req + return '\n'.join(list(self.comments) + [str(req)]) + '\n' + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/__main__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/__main__.py new file mode 100644 index 0000000..5556539 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/__main__.py @@ -0,0 +1,19 @@ +from __future__ import absolute_import + +import os +import sys + +# If we are running from a wheel, add the wheel to sys.path +# This allows the usage python pip-*.whl/pip install pip-*.whl +if __package__ == '': + # __file__ is pip-*.whl/pip/__main__.py + # first dirname call strips of '/__main__.py', second strips off '/pip' + # Resulting path is the name of the wheel itself + # Add that to sys.path so we can import pip + path = os.path.dirname(os.path.dirname(__file__)) + sys.path.insert(0, path) + +import pip # noqa + +if __name__ == '__main__': + sys.exit(pip.main()) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/__init__.py new file mode 100644 index 0000000..b09a7c3 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/__init__.py @@ -0,0 +1,100 @@ +""" +pip._vendor is for vendoring dependencies of pip to prevent needing pip to +depend on something external. + +Files inside of pip._vendor should be considered immutable and should only be +updated to versions from upstream. +""" +from __future__ import absolute_import + +import glob +import os.path +import sys + +# Downstream redistributors which have debundled our dependencies should also +# patch this value to be true. This will trigger the additional patching +# to cause things like "six" to be available as pip. +DEBUNDLED = False + +# By default, look in this directory for a bunch of .whl files which we will +# add to the beginning of sys.path before attempting to import anything. This +# is done to support downstream re-distributors like Debian and Fedora who +# wish to create their own Wheels for our dependencies to aid in debundling. +WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) + + +# Define a small helper function to alias our vendored modules to the real ones +# if the vendored ones do not exist. This idea of this was taken from +# https://github.com/kennethreitz/requests/pull/2567. +def vendored(modulename): + vendored_name = "{0}.{1}".format(__name__, modulename) + + try: + __import__(vendored_name, globals(), locals(), level=0) + except ImportError: + __import__(modulename, globals(), locals(), level=0) + sys.modules[vendored_name] = sys.modules[modulename] + base, head = vendored_name.rsplit(".", 1) + setattr(sys.modules[base], head, sys.modules[modulename]) + + +# If we're operating in a debundled setup, then we want to go ahead and trigger +# the aliasing of our vendored libraries as well as looking for wheels to add +# to our sys.path. This will cause all of this code to be a no-op typically +# however downstream redistributors can enable it in a consistent way across +# all platforms. +if DEBUNDLED: + # Actually look inside of WHEEL_DIR to find .whl files and add them to the + # front of our sys.path. + sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path + + # Actually alias all of our vendored dependencies. + vendored("cachecontrol") + vendored("colorama") + vendored("distlib") + vendored("html5lib") + vendored("lockfile") + vendored("six") + vendored("six.moves") + vendored("six.moves.urllib") + vendored("packaging") + vendored("packaging.version") + vendored("packaging.specifiers") + vendored("pkg_resources") + vendored("progress") + vendored("retrying") + vendored("requests") + vendored("requests.packages") + vendored("requests.packages.urllib3") + vendored("requests.packages.urllib3._collections") + vendored("requests.packages.urllib3.connection") + vendored("requests.packages.urllib3.connectionpool") + vendored("requests.packages.urllib3.contrib") + try: + vendored("requests.packages.urllib3.contrib.ntlmpool") + except ImportError: + pass + try: + vendored("requests.packages.urllib3.contrib.pyopenssl") + except ImportError: + pass + vendored("requests.packages.urllib3.exceptions") + vendored("requests.packages.urllib3.fields") + vendored("requests.packages.urllib3.filepost") + vendored("requests.packages.urllib3.packages") + vendored("requests.packages.urllib3.packages.ordered_dict") + vendored("requests.packages.urllib3.packages.six") + vendored("requests.packages.urllib3.packages.ssl_match_hostname") + vendored("requests.packages.urllib3.packages.ssl_match_hostname." + "_implementation") + vendored("requests.packages.urllib3.poolmanager") + vendored("requests.packages.urllib3.request") + vendored("requests.packages.urllib3.response") + vendored("requests.packages.urllib3.util") + vendored("requests.packages.urllib3.util.connection") + vendored("requests.packages.urllib3.util.request") + vendored("requests.packages.urllib3.util.response") + vendored("requests.packages.urllib3.util.retry") + vendored("requests.packages.urllib3.util.ssl_") + vendored("requests.packages.urllib3.util.timeout") + vendored("requests.packages.urllib3.util.url") diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/_markerlib/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/_markerlib/__init__.py new file mode 100644 index 0000000..197781a --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/_markerlib/__init__.py @@ -0,0 +1,16 @@ +try: + import ast + from pip._vendor._markerlib.markers import default_environment, compile, interpret +except ImportError: + if 'ast' in globals(): + raise + def default_environment(): + return {} + def compile(marker): + def marker_fn(environment=None, override=None): + # 'empty markers are True' heuristic won't install extra deps. + return not marker.strip() + marker_fn.__doc__ = marker + return marker_fn + def interpret(marker, environment=None, override=None): + return compile(marker)() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/_markerlib/markers.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/_markerlib/markers.py new file mode 100644 index 0000000..fa83706 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/_markerlib/markers.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +"""Interpret PEP 345 environment markers. + +EXPR [in|==|!=|not in] EXPR [or|and] ... + +where EXPR belongs to any of those: + + python_version = '%s.%s' % (sys.version_info[0], sys.version_info[1]) + python_full_version = sys.version.split()[0] + os.name = os.name + sys.platform = sys.platform + platform.version = platform.version() + platform.machine = platform.machine() + platform.python_implementation = platform.python_implementation() + a free string, like '2.6', or 'win32' +""" + +__all__ = ['default_environment', 'compile', 'interpret'] + +import ast +import os +import platform +import sys +import weakref + +_builtin_compile = compile + +try: + from platform import python_implementation +except ImportError: + if os.name == "java": + # Jython 2.5 has ast module, but not platform.python_implementation() function. + def python_implementation(): + return "Jython" + else: + raise + + +# restricted set of variables +_VARS = {'sys.platform': sys.platform, + 'python_version': '%s.%s' % sys.version_info[:2], + # FIXME parsing sys.platform is not reliable, but there is no other + # way to get e.g. 2.7.2+, and the PEP is defined with sys.version + 'python_full_version': sys.version.split(' ', 1)[0], + 'os.name': os.name, + 'platform.version': platform.version(), + 'platform.machine': platform.machine(), + 'platform.python_implementation': python_implementation(), + 'extra': None # wheel extension + } + +for var in list(_VARS.keys()): + if '.' in var: + _VARS[var.replace('.', '_')] = _VARS[var] + +def default_environment(): + """Return copy of default PEP 385 globals dictionary.""" + return dict(_VARS) + +class ASTWhitelist(ast.NodeTransformer): + def __init__(self, statement): + self.statement = statement # for error messages + + ALLOWED = (ast.Compare, ast.BoolOp, ast.Attribute, ast.Name, ast.Load, ast.Str) + # Bool operations + ALLOWED += (ast.And, ast.Or) + # Comparison operations + ALLOWED += (ast.Eq, ast.Gt, ast.GtE, ast.In, ast.Is, ast.IsNot, ast.Lt, ast.LtE, ast.NotEq, ast.NotIn) + + def visit(self, node): + """Ensure statement only contains allowed nodes.""" + if not isinstance(node, self.ALLOWED): + raise SyntaxError('Not allowed in environment markers.\n%s\n%s' % + (self.statement, + (' ' * node.col_offset) + '^')) + return ast.NodeTransformer.visit(self, node) + + def visit_Attribute(self, node): + """Flatten one level of attribute access.""" + new_node = ast.Name("%s.%s" % (node.value.id, node.attr), node.ctx) + return ast.copy_location(new_node, node) + +def parse_marker(marker): + tree = ast.parse(marker, mode='eval') + new_tree = ASTWhitelist(marker).generic_visit(tree) + return new_tree + +def compile_marker(parsed_marker): + return _builtin_compile(parsed_marker, '', 'eval', + dont_inherit=True) + +_cache = weakref.WeakValueDictionary() + +def compile(marker): + """Return compiled marker as a function accepting an environment dict.""" + try: + return _cache[marker] + except KeyError: + pass + if not marker.strip(): + def marker_fn(environment=None, override=None): + """""" + return True + else: + compiled_marker = compile_marker(parse_marker(marker)) + def marker_fn(environment=None, override=None): + """override updates environment""" + if override is None: + override = {} + if environment is None: + environment = default_environment() + environment.update(override) + return eval(compiled_marker, environment) + marker_fn.__doc__ = marker + _cache[marker] = marker_fn + return _cache[marker] + +def interpret(marker, environment=None): + return compile(marker)(environment) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__init__.py new file mode 100644 index 0000000..724e220 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__init__.py @@ -0,0 +1,11 @@ +"""CacheControl import Interface. + +Make it easy to import from cachecontrol without long namespaces. +""" +__author__ = 'Eric Larson' +__email__ = 'eric@ionrock.org' +__version__ = '0.11.6' + +from .wrapper import CacheControl +from .adapter import CacheControlAdapter +from .controller import CacheController diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/_cmd.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/_cmd.py new file mode 100644 index 0000000..afdcc88 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/_cmd.py @@ -0,0 +1,60 @@ +import logging + +from pip._vendor import requests + +from pip._vendor.cachecontrol.adapter import CacheControlAdapter +from pip._vendor.cachecontrol.cache import DictCache +from pip._vendor.cachecontrol.controller import logger + +from argparse import ArgumentParser + + +def setup_logging(): + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler() + logger.addHandler(handler) + + +def get_session(): + adapter = CacheControlAdapter( + DictCache(), + cache_etags=True, + serializer=None, + heuristic=None, + ) + sess = requests.Session() + sess.mount('http://', adapter) + sess.mount('https://', adapter) + + sess.cache_controller = adapter.controller + return sess + + +def get_args(): + parser = ArgumentParser() + parser.add_argument('url', help='The URL to try and cache') + return parser.parse_args() + + +def main(args=None): + args = get_args() + sess = get_session() + + # Make a request to get a response + resp = sess.get(args.url) + + # Turn on logging + setup_logging() + + # try setting the cache + sess.cache_controller.cache_response(resp.request, resp.raw) + + # Now try to get it + if sess.cache_controller.cached_request(resp.request): + print('Cached!') + else: + print('Not cached :(') + + +if __name__ == '__main__': + main() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/adapter.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/adapter.py new file mode 100644 index 0000000..74589e0 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/adapter.py @@ -0,0 +1,117 @@ +import functools + +from pip._vendor.requests.adapters import HTTPAdapter + +from .controller import CacheController +from .cache import DictCache +from .filewrapper import CallbackFileWrapper + + +class CacheControlAdapter(HTTPAdapter): + invalidating_methods = set(['PUT', 'DELETE']) + + def __init__(self, cache=None, + cache_etags=True, + controller_class=None, + serializer=None, + heuristic=None, + *args, **kw): + super(CacheControlAdapter, self).__init__(*args, **kw) + self.cache = cache or DictCache() + self.heuristic = heuristic + + controller_factory = controller_class or CacheController + self.controller = controller_factory( + self.cache, + cache_etags=cache_etags, + serializer=serializer, + ) + + def send(self, request, **kw): + """ + Send a request. Use the request information to see if it + exists in the cache and cache the response if we need to and can. + """ + if request.method == 'GET': + cached_response = self.controller.cached_request(request) + if cached_response: + return self.build_response(request, cached_response, + from_cache=True) + + # check for etags and add headers if appropriate + request.headers.update( + self.controller.conditional_headers(request) + ) + + resp = super(CacheControlAdapter, self).send(request, **kw) + + return resp + + def build_response(self, request, response, from_cache=False): + """ + Build a response by making a request or using the cache. + + This will end up calling send and returning a potentially + cached response + """ + if not from_cache and request.method == 'GET': + + # apply any expiration heuristics + if response.status == 304: + # We must have sent an ETag request. This could mean + # that we've been expired already or that we simply + # have an etag. In either case, we want to try and + # update the cache if that is the case. + cached_response = self.controller.update_cached_response( + request, response + ) + + if cached_response is not response: + from_cache = True + + # We are done with the server response, read a + # possible response body (compliant servers will + # not return one, but we cannot be 100% sure) and + # release the connection back to the pool. + response.read(decode_content=False) + response.release_conn() + + response = cached_response + + # We always cache the 301 responses + elif response.status == 301: + self.controller.cache_response(request, response) + else: + # Check for any heuristics that might update headers + # before trying to cache. + if self.heuristic: + response = self.heuristic.apply(response) + + # Wrap the response file with a wrapper that will cache the + # response when the stream has been consumed. + response._fp = CallbackFileWrapper( + response._fp, + functools.partial( + self.controller.cache_response, + request, + response, + ) + ) + + resp = super(CacheControlAdapter, self).build_response( + request, response + ) + + # See if we should invalidate the cache. + if request.method in self.invalidating_methods and resp.ok: + cache_url = self.controller.cache_url(request.url) + self.cache.delete(cache_url) + + # Give the request a from_cache attr to let people use it + resp.from_cache = from_cache + + return resp + + def close(self): + self.cache.close() + super(CacheControlAdapter, self).close() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/cache.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/cache.py new file mode 100644 index 0000000..7389a73 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/cache.py @@ -0,0 +1,39 @@ +""" +The cache object API for implementing caches. The default is a thread +safe in-memory dictionary. +""" +from threading import Lock + + +class BaseCache(object): + + def get(self, key): + raise NotImplemented() + + def set(self, key, value): + raise NotImplemented() + + def delete(self, key): + raise NotImplemented() + + def close(self): + pass + + +class DictCache(BaseCache): + + def __init__(self, init_dict=None): + self.lock = Lock() + self.data = init_dict or {} + + def get(self, key): + return self.data.get(key, None) + + def set(self, key, value): + with self.lock: + self.data.update({key: value}) + + def delete(self, key): + with self.lock: + if key in self.data: + self.data.pop(key) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__init__.py new file mode 100644 index 0000000..f9e66a1 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__init__.py @@ -0,0 +1,18 @@ +from textwrap import dedent + +try: + from .file_cache import FileCache +except ImportError: + notice = dedent(''' + NOTE: In order to use the FileCache you must have + lockfile installed. You can install it via pip: + pip install lockfile + ''') + print(notice) + + +try: + import redis + from .redis_cache import RedisCache +except ImportError: + pass diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py new file mode 100644 index 0000000..b77728f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py @@ -0,0 +1,116 @@ +import hashlib +import os + +from pip._vendor.lockfile import LockFile +from pip._vendor.lockfile.mkdirlockfile import MkdirLockFile + +from ..cache import BaseCache +from ..controller import CacheController + + +def _secure_open_write(filename, fmode): + # We only want to write to this file, so open it in write only mode + flags = os.O_WRONLY + + # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only + # will open *new* files. + # We specify this because we want to ensure that the mode we pass is the + # mode of the file. + flags |= os.O_CREAT | os.O_EXCL + + # Do not follow symlinks to prevent someone from making a symlink that + # we follow and insecurely open a cache file. + if hasattr(os, "O_NOFOLLOW"): + flags |= os.O_NOFOLLOW + + # On Windows we'll mark this file as binary + if hasattr(os, "O_BINARY"): + flags |= os.O_BINARY + + # Before we open our file, we want to delete any existing file that is + # there + try: + os.remove(filename) + except (IOError, OSError): + # The file must not exist already, so we can just skip ahead to opening + pass + + # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a + # race condition happens between the os.remove and this line, that an + # error will be raised. Because we utilize a lockfile this should only + # happen if someone is attempting to attack us. + fd = os.open(filename, flags, fmode) + try: + return os.fdopen(fd, "wb") + except: + # An error occurred wrapping our FD in a file object + os.close(fd) + raise + + +class FileCache(BaseCache): + def __init__(self, directory, forever=False, filemode=0o0600, + dirmode=0o0700, use_dir_lock=None, lock_class=None): + + if use_dir_lock is not None and lock_class is not None: + raise ValueError("Cannot use use_dir_lock and lock_class together") + + if use_dir_lock: + lock_class = MkdirLockFile + + if lock_class is None: + lock_class = LockFile + + self.directory = directory + self.forever = forever + self.filemode = filemode + self.dirmode = dirmode + self.lock_class = lock_class + + + @staticmethod + def encode(x): + return hashlib.sha224(x.encode()).hexdigest() + + def _fn(self, name): + # NOTE: This method should not change as some may depend on it. + # See: https://github.com/ionrock/cachecontrol/issues/63 + hashed = self.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key): + name = self._fn(key) + if not os.path.exists(name): + return None + + with open(name, 'rb') as fh: + return fh.read() + + def set(self, key, value): + name = self._fn(key) + + # Make sure the directory exists + try: + os.makedirs(os.path.dirname(name), self.dirmode) + except (IOError, OSError): + pass + + with self.lock_class(name) as lock: + # Write our actual file + with _secure_open_write(lock.path, self.filemode) as fh: + fh.write(value) + + def delete(self, key): + name = self._fn(key) + if not self.forever: + os.remove(name) + + +def url_to_file_path(url, filecache): + """Return the file cache path based on the URL. + + This does not ensure the file exists! + """ + key = CacheController.cache_url(url) + return filecache._fn(key) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py new file mode 100644 index 0000000..9f5d55f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py @@ -0,0 +1,41 @@ +from __future__ import division + +from datetime import datetime + + +def total_seconds(td): + """Python 2.6 compatability""" + if hasattr(td, 'total_seconds'): + return td.total_seconds() + + ms = td.microseconds + secs = (td.seconds + td.days * 24 * 3600) + return (ms + secs * 10**6) / 10**6 + + +class RedisCache(object): + + def __init__(self, conn): + self.conn = conn + + def get(self, key): + return self.conn.get(key) + + def set(self, key, value, expires=None): + if not expires: + self.conn.set(key, value) + else: + expires = expires - datetime.now() + self.conn.setex(key, total_seconds(expires), value) + + def delete(self, key): + self.conn.delete(key) + + def clear(self): + """Helper for clearing all the keys in a database. Use with + caution!""" + for key in self.conn.keys(): + self.conn.delete(key) + + def close(self): + self.conn.disconnect() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/compat.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/compat.py new file mode 100644 index 0000000..018e6ac --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/compat.py @@ -0,0 +1,20 @@ +try: + from urllib.parse import urljoin +except ImportError: + from urlparse import urljoin + + +try: + import cPickle as pickle +except ImportError: + import pickle + + +from pip._vendor.requests.packages.urllib3.response import HTTPResponse +from pip._vendor.requests.packages.urllib3.util import is_fp_closed + +# Replicate some six behaviour +try: + text_type = (unicode,) +except NameError: + text_type = (str,) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/controller.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/controller.py new file mode 100644 index 0000000..6e591f8 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/controller.py @@ -0,0 +1,353 @@ +""" +The httplib2 algorithms ported for use with requests. +""" +import logging +import re +import calendar +import time +from email.utils import parsedate_tz + +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .cache import DictCache +from .serialize import Serializer + + +logger = logging.getLogger(__name__) + +URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") + + +def parse_uri(uri): + """Parses a URI using the regex given in Appendix B of RFC 3986. + + (scheme, authority, path, query, fragment) = parse_uri(uri) + """ + groups = URI.match(uri).groups() + return (groups[1], groups[3], groups[4], groups[6], groups[8]) + + +class CacheController(object): + """An interface to see if request should cached or not. + """ + def __init__(self, cache=None, cache_etags=True, serializer=None): + self.cache = cache or DictCache() + self.cache_etags = cache_etags + self.serializer = serializer or Serializer() + + @classmethod + def _urlnorm(cls, uri): + """Normalize the URL to create a safe key for the cache""" + (scheme, authority, path, query, fragment) = parse_uri(uri) + if not scheme or not authority: + raise Exception("Only absolute URIs are allowed. uri = %s" % uri) + + scheme = scheme.lower() + authority = authority.lower() + + if not path: + path = "/" + + # Could do syntax based normalization of the URI before + # computing the digest. See Section 6.2.2 of Std 66. + request_uri = query and "?".join([path, query]) or path + defrag_uri = scheme + "://" + authority + request_uri + + return defrag_uri + + @classmethod + def cache_url(cls, uri): + return cls._urlnorm(uri) + + def parse_cache_control(self, headers): + """ + Parse the cache control headers returning a dictionary with values + for the different directives. + """ + retval = {} + + cc_header = 'cache-control' + if 'Cache-Control' in headers: + cc_header = 'Cache-Control' + + if cc_header in headers: + parts = headers[cc_header].split(',') + parts_with_args = [ + tuple([x.strip().lower() for x in part.split("=", 1)]) + for part in parts if -1 != part.find("=") + ] + parts_wo_args = [ + (name.strip().lower(), 1) + for name in parts if -1 == name.find("=") + ] + retval = dict(parts_with_args + parts_wo_args) + return retval + + def cached_request(self, request): + """ + Return a cached response if it exists in the cache, otherwise + return False. + """ + cache_url = self.cache_url(request.url) + logger.debug('Looking up "%s" in the cache', cache_url) + cc = self.parse_cache_control(request.headers) + + # Bail out if the request insists on fresh data + if 'no-cache' in cc: + logger.debug('Request header has "no-cache", cache bypassed') + return False + + if 'max-age' in cc and cc['max-age'] == 0: + logger.debug('Request header has "max_age" as 0, cache bypassed') + return False + + # Request allows serving from the cache, let's see if we find something + cache_data = self.cache.get(cache_url) + if cache_data is None: + logger.debug('No cache entry available') + return False + + # Check whether it can be deserialized + resp = self.serializer.loads(request, cache_data) + if not resp: + logger.warning('Cache entry deserialization failed, entry ignored') + return False + + # If we have a cached 301, return it immediately. We don't + # need to test our response for other headers b/c it is + # intrinsically "cacheable" as it is Permanent. + # See: + # https://tools.ietf.org/html/rfc7231#section-6.4.2 + # + # Client can try to refresh the value by repeating the request + # with cache busting headers as usual (ie no-cache). + if resp.status == 301: + msg = ('Returning cached "301 Moved Permanently" response ' + '(ignoring date and etag information)') + logger.debug(msg) + return resp + + headers = CaseInsensitiveDict(resp.headers) + if not headers or 'date' not in headers: + if 'etag' not in headers: + # Without date or etag, the cached response can never be used + # and should be deleted. + logger.debug('Purging cached response: no date or etag') + self.cache.delete(cache_url) + logger.debug('Ignoring cached response: no date') + return False + + now = time.time() + date = calendar.timegm( + parsedate_tz(headers['date']) + ) + current_age = max(0, now - date) + logger.debug('Current age based on date: %i', current_age) + + # TODO: There is an assumption that the result will be a + # urllib3 response object. This may not be best since we + # could probably avoid instantiating or constructing the + # response until we know we need it. + resp_cc = self.parse_cache_control(headers) + + # determine freshness + freshness_lifetime = 0 + + # Check the max-age pragma in the cache control header + if 'max-age' in resp_cc and resp_cc['max-age'].isdigit(): + freshness_lifetime = int(resp_cc['max-age']) + logger.debug('Freshness lifetime from max-age: %i', + freshness_lifetime) + + # If there isn't a max-age, check for an expires header + elif 'expires' in headers: + expires = parsedate_tz(headers['expires']) + if expires is not None: + expire_time = calendar.timegm(expires) - date + freshness_lifetime = max(0, expire_time) + logger.debug("Freshness lifetime from expires: %i", + freshness_lifetime) + + # Determine if we are setting freshness limit in the + # request. Note, this overrides what was in the response. + if 'max-age' in cc: + try: + freshness_lifetime = int(cc['max-age']) + logger.debug('Freshness lifetime from request max-age: %i', + freshness_lifetime) + except ValueError: + freshness_lifetime = 0 + + if 'min-fresh' in cc: + try: + min_fresh = int(cc['min-fresh']) + except ValueError: + min_fresh = 0 + # adjust our current age by our min fresh + current_age += min_fresh + logger.debug('Adjusted current age from min-fresh: %i', + current_age) + + # Return entry if it is fresh enough + if freshness_lifetime > current_age: + logger.debug('The response is "fresh", returning cached response') + logger.debug('%i > %i', freshness_lifetime, current_age) + return resp + + # we're not fresh. If we don't have an Etag, clear it out + if 'etag' not in headers: + logger.debug( + 'The cached response is "stale" with no etag, purging' + ) + self.cache.delete(cache_url) + + # return the original handler + return False + + def conditional_headers(self, request): + cache_url = self.cache_url(request.url) + resp = self.serializer.loads(request, self.cache.get(cache_url)) + new_headers = {} + + if resp: + headers = CaseInsensitiveDict(resp.headers) + + if 'etag' in headers: + new_headers['If-None-Match'] = headers['ETag'] + + if 'last-modified' in headers: + new_headers['If-Modified-Since'] = headers['Last-Modified'] + + return new_headers + + def cache_response(self, request, response, body=None): + """ + Algorithm for caching requests. + + This assumes a requests Response object. + """ + # From httplib2: Don't cache 206's since we aren't going to + # handle byte range requests + cacheable_status_codes = [200, 203, 300, 301] + if response.status not in cacheable_status_codes: + logger.debug( + 'Status code %s not in %s', + response.status, + cacheable_status_codes + ) + return + + response_headers = CaseInsensitiveDict(response.headers) + + # If we've been given a body, our response has a Content-Length, that + # Content-Length is valid then we can check to see if the body we've + # been given matches the expected size, and if it doesn't we'll just + # skip trying to cache it. + if (body is not None and + "content-length" in response_headers and + response_headers["content-length"].isdigit() and + int(response_headers["content-length"]) != len(body)): + return + + cc_req = self.parse_cache_control(request.headers) + cc = self.parse_cache_control(response_headers) + + cache_url = self.cache_url(request.url) + logger.debug('Updating cache with response from "%s"', cache_url) + + # Delete it from the cache if we happen to have it stored there + no_store = False + if cc.get('no-store'): + no_store = True + logger.debug('Response header has "no-store"') + if cc_req.get('no-store'): + no_store = True + logger.debug('Request header has "no-store"') + if no_store and self.cache.get(cache_url): + logger.debug('Purging existing cache entry to honor "no-store"') + self.cache.delete(cache_url) + + # If we've been given an etag, then keep the response + if self.cache_etags and 'etag' in response_headers: + logger.debug('Caching due to etag') + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body=body), + ) + + # Add to the cache any 301s. We do this before looking that + # the Date headers. + elif response.status == 301: + logger.debug('Caching permanant redirect') + self.cache.set( + cache_url, + self.serializer.dumps(request, response) + ) + + # Add to the cache if the response headers demand it. If there + # is no date header then we can't do anything about expiring + # the cache. + elif 'date' in response_headers: + # cache when there is a max-age > 0 + if cc and cc.get('max-age'): + if int(cc['max-age']) > 0: + logger.debug('Caching b/c date exists and max-age > 0') + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body=body), + ) + + # If the request can expire, it means we should cache it + # in the meantime. + elif 'expires' in response_headers: + if response_headers['expires']: + logger.debug('Caching b/c of expires header') + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body=body), + ) + + def update_cached_response(self, request, response): + """On a 304 we will get a new set of headers that we want to + update our cached value with, assuming we have one. + + This should only ever be called when we've sent an ETag and + gotten a 304 as the response. + """ + cache_url = self.cache_url(request.url) + + cached_response = self.serializer.loads( + request, + self.cache.get(cache_url) + ) + + if not cached_response: + # we didn't have a cached response + return response + + # Lets update our headers with the headers from the new request: + # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 + # + # The server isn't supposed to send headers that would make + # the cached body invalid. But... just in case, we'll be sure + # to strip out ones we know that might be problmatic due to + # typical assumptions. + excluded_headers = [ + "content-length", + ] + + cached_response.headers.update( + dict((k, v) for k, v in response.headers.items() + if k.lower() not in excluded_headers) + ) + + # we want a 200 b/c we have content via the cache + cached_response.status = 200 + + # update our cache + self.cache.set( + cache_url, + self.serializer.dumps(request, cached_response), + ) + + return cached_response diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/filewrapper.py new file mode 100644 index 0000000..4b91bce --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/filewrapper.py @@ -0,0 +1,63 @@ +from io import BytesIO + + +class CallbackFileWrapper(object): + """ + Small wrapper around a fp object which will tee everything read into a + buffer, and when that file is closed it will execute a callback with the + contents of that buffer. + + All attributes are proxied to the underlying file object. + + This class uses members with a double underscore (__) leading prefix so as + not to accidentally shadow an attribute. + """ + + def __init__(self, fp, callback): + self.__buf = BytesIO() + self.__fp = fp + self.__callback = callback + + def __getattr__(self, name): + # The vaguaries of garbage collection means that self.__fp is + # not always set. By using __getattribute__ and the private + # name[0] allows looking up the attribute value and raising an + # AttributeError when it doesn't exist. This stop thigns from + # infinitely recursing calls to getattr in the case where + # self.__fp hasn't been set. + # + # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers + fp = self.__getattribute__('_CallbackFileWrapper__fp') + return getattr(fp, name) + + def __is_fp_closed(self): + try: + return self.__fp.fp is None + except AttributeError: + pass + + try: + return self.__fp.closed + except AttributeError: + pass + + # We just don't cache it then. + # TODO: Add some logging here... + return False + + def read(self, amt=None): + data = self.__fp.read(amt) + self.__buf.write(data) + + if self.__is_fp_closed(): + if self.__callback: + self.__callback(self.__buf.getvalue()) + + # We assign this to None here, because otherwise we can get into + # really tricky problems where the CPython interpreter dead locks + # because the callback is holding a reference to something which + # has a __del__ method. Setting this to None breaks the cycle + # and allows the garbage collector to do it's thing normally. + self.__callback = None + + return data diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/heuristics.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/heuristics.py new file mode 100644 index 0000000..94715a4 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/heuristics.py @@ -0,0 +1,138 @@ +import calendar +import time + +from email.utils import formatdate, parsedate, parsedate_tz + +from datetime import datetime, timedelta + +TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" + + +def expire_after(delta, date=None): + date = date or datetime.now() + return date + delta + + +def datetime_to_header(dt): + return formatdate(calendar.timegm(dt.timetuple())) + + +class BaseHeuristic(object): + + def warning(self, response): + """ + Return a valid 1xx warning header value describing the cache + adjustments. + + The response is provided too allow warnings like 113 + http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need + to explicitly say response is over 24 hours old. + """ + return '110 - "Response is Stale"' + + def update_headers(self, response): + """Update the response headers with any new headers. + + NOTE: This SHOULD always include some Warning header to + signify that the response was cached by the client, not + by way of the provided headers. + """ + return {} + + def apply(self, response): + updated_headers = self.update_headers(response) + + if updated_headers: + response.headers.update(updated_headers) + warning_header_value = self.warning(response) + if warning_header_value is not None: + response.headers.update({'Warning': warning_header_value}) + + return response + + +class OneDayCache(BaseHeuristic): + """ + Cache the response by providing an expires 1 day in the + future. + """ + def update_headers(self, response): + headers = {} + + if 'expires' not in response.headers: + date = parsedate(response.headers['date']) + expires = expire_after(timedelta(days=1), + date=datetime(*date[:6])) + headers['expires'] = datetime_to_header(expires) + headers['cache-control'] = 'public' + return headers + + +class ExpiresAfter(BaseHeuristic): + """ + Cache **all** requests for a defined time period. + """ + + def __init__(self, **kw): + self.delta = timedelta(**kw) + + def update_headers(self, response): + expires = expire_after(self.delta) + return { + 'expires': datetime_to_header(expires), + 'cache-control': 'public', + } + + def warning(self, response): + tmpl = '110 - Automatically cached for %s. Response might be stale' + return tmpl % self.delta + + +class LastModified(BaseHeuristic): + """ + If there is no Expires header already, fall back on Last-Modified + using the heuristic from + http://tools.ietf.org/html/rfc7234#section-4.2.2 + to calculate a reasonable value. + + Firefox also does something like this per + https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ + http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 + Unlike mozilla we limit this to 24-hr. + """ + cacheable_by_default_statuses = set([ + 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501 + ]) + + def update_headers(self, resp): + headers = resp.headers + + if 'expires' in headers: + return {} + + if 'cache-control' in headers and headers['cache-control'] != 'public': + return {} + + if resp.status not in self.cacheable_by_default_statuses: + return {} + + if 'date' not in headers or 'last-modified' not in headers: + return {} + + date = calendar.timegm(parsedate_tz(headers['date'])) + last_modified = parsedate(headers['last-modified']) + if date is None or last_modified is None: + return {} + + now = time.time() + current_age = max(0, now - date) + delta = date - calendar.timegm(last_modified) + freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) + if freshness_lifetime <= current_age: + return {} + + expires = date + freshness_lifetime + return {'expires': time.strftime(TIME_FMT, time.gmtime(expires))} + + def warning(self, resp): + return None diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/serialize.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/serialize.py new file mode 100644 index 0000000..ffbfbf6 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/serialize.py @@ -0,0 +1,190 @@ +import base64 +import io +import json +import zlib + +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .compat import HTTPResponse, pickle, text_type + + +def _b64_encode_bytes(b): + return base64.b64encode(b).decode("ascii") + + +def _b64_encode_str(s): + return _b64_encode_bytes(s.encode("utf8")) + + +def _b64_encode(s): + if isinstance(s, text_type): + return _b64_encode_str(s) + return _b64_encode_bytes(s) + + +def _b64_decode_bytes(b): + return base64.b64decode(b.encode("ascii")) + + +def _b64_decode_str(s): + return _b64_decode_bytes(s).decode("utf8") + + +class Serializer(object): + + def dumps(self, request, response, body=None): + response_headers = CaseInsensitiveDict(response.headers) + + if body is None: + body = response.read(decode_content=False) + + # NOTE: 99% sure this is dead code. I'm only leaving it + # here b/c I don't have a test yet to prove + # it. Basically, before using + # `cachecontrol.filewrapper.CallbackFileWrapper`, + # this made an effort to reset the file handle. The + # `CallbackFileWrapper` short circuits this code by + # setting the body as the content is consumed, the + # result being a `body` argument is *always* passed + # into cache_response, and in turn, + # `Serializer.dump`. + response._fp = io.BytesIO(body) + + data = { + "response": { + "body": _b64_encode_bytes(body), + "headers": dict( + (_b64_encode(k), _b64_encode(v)) + for k, v in response.headers.items() + ), + "status": response.status, + "version": response.version, + "reason": _b64_encode_str(response.reason), + "strict": response.strict, + "decode_content": response.decode_content, + }, + } + + # Construct our vary headers + data["vary"] = {} + if "vary" in response_headers: + varied_headers = response_headers['vary'].split(',') + for header in varied_headers: + header = header.strip() + data["vary"][header] = request.headers.get(header, None) + + # Encode our Vary headers to ensure they can be serialized as JSON + data["vary"] = dict( + (_b64_encode(k), _b64_encode(v) if v is not None else v) + for k, v in data["vary"].items() + ) + + return b",".join([ + b"cc=2", + zlib.compress( + json.dumps( + data, separators=(",", ":"), sort_keys=True, + ).encode("utf8"), + ), + ]) + + def loads(self, request, data): + # Short circuit if we've been given an empty set of data + if not data: + return + + # Determine what version of the serializer the data was serialized + # with + try: + ver, data = data.split(b",", 1) + except ValueError: + ver = b"cc=0" + + # Make sure that our "ver" is actually a version and isn't a false + # positive from a , being in the data stream. + if ver[:3] != b"cc=": + data = ver + data + ver = b"cc=0" + + # Get the version number out of the cc=N + ver = ver.split(b"=", 1)[-1].decode("ascii") + + # Dispatch to the actual load method for the given version + try: + return getattr(self, "_loads_v{0}".format(ver))(request, data) + except AttributeError: + # This is a version we don't have a loads function for, so we'll + # just treat it as a miss and return None + return + + def prepare_response(self, request, cached): + """Verify our vary headers match and construct a real urllib3 + HTTPResponse object. + """ + # Special case the '*' Vary value as it means we cannot actually + # determine if the cached response is suitable for this request. + if "*" in cached.get("vary", {}): + return + + # Ensure that the Vary headers for the cached response match our + # request + for header, value in cached.get("vary", {}).items(): + if request.headers.get(header, None) != value: + return + + body_raw = cached["response"].pop("body") + + try: + body = io.BytesIO(body_raw) + except TypeError: + # This can happen if cachecontrol serialized to v1 format (pickle) + # using Python 2. A Python 2 str(byte string) will be unpickled as + # a Python 3 str (unicode string), which will cause the above to + # fail with: + # + # TypeError: 'str' does not support the buffer interface + body = io.BytesIO(body_raw.encode('utf8')) + + return HTTPResponse( + body=body, + preload_content=False, + **cached["response"] + ) + + def _loads_v0(self, request, data): + # The original legacy cache data. This doesn't contain enough + # information to construct everything we need, so we'll treat this as + # a miss. + return + + def _loads_v1(self, request, data): + try: + cached = pickle.loads(data) + except ValueError: + return + + return self.prepare_response(request, cached) + + def _loads_v2(self, request, data): + try: + cached = json.loads(zlib.decompress(data).decode("utf8")) + except ValueError: + return + + # We need to decode the items that we've base64 encoded + cached["response"]["body"] = _b64_decode_bytes( + cached["response"]["body"] + ) + cached["response"]["headers"] = dict( + (_b64_decode_str(k), _b64_decode_str(v)) + for k, v in cached["response"]["headers"].items() + ) + cached["response"]["reason"] = _b64_decode_str( + cached["response"]["reason"], + ) + cached["vary"] = dict( + (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v) + for k, v in cached["vary"].items() + ) + + return self.prepare_response(request, cached) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/wrapper.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/wrapper.py new file mode 100644 index 0000000..ea421aa --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/cachecontrol/wrapper.py @@ -0,0 +1,21 @@ +from .adapter import CacheControlAdapter +from .cache import DictCache + + +def CacheControl(sess, + cache=None, + cache_etags=True, + serializer=None, + heuristic=None): + + cache = cache or DictCache() + adapter = CacheControlAdapter( + cache, + cache_etags=cache_etags, + serializer=serializer, + heuristic=heuristic, + ) + sess.mount('http://', adapter) + sess.mount('https://', adapter) + + return sess diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/__init__.py new file mode 100644 index 0000000..8fc3f01 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/__init__.py @@ -0,0 +1,7 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.3.6' + diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/ansi.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/ansi.py new file mode 100644 index 0000000..7877658 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/ansi.py @@ -0,0 +1,102 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +''' +This module generates ANSI character codes to printing colors to terminals. +See: http://en.wikipedia.org/wiki/ANSI_escape_code +''' + +CSI = '\033[' +OSC = '\033]' +BEL = '\007' + + +def code_to_chars(code): + return CSI + str(code) + 'm' + +def set_title(title): + return OSC + '2;' + title + BEL + +def clear_screen(mode=2): + return CSI + str(mode) + 'J' + +def clear_line(mode=2): + return CSI + str(mode) + 'K' + + +class AnsiCodes(object): + def __init__(self): + # the subclasses declare class attributes which are numbers. + # Upon instantiation we define instance attributes, which are the same + # as the class attributes but wrapped with the ANSI escape sequence + for name in dir(self): + if not name.startswith('_'): + value = getattr(self, name) + setattr(self, name, code_to_chars(value)) + + +class AnsiCursor(object): + def UP(self, n=1): + return CSI + str(n) + 'A' + def DOWN(self, n=1): + return CSI + str(n) + 'B' + def FORWARD(self, n=1): + return CSI + str(n) + 'C' + def BACK(self, n=1): + return CSI + str(n) + 'D' + def POS(self, x=1, y=1): + return CSI + str(y) + ';' + str(x) + 'H' + + +class AnsiFore(AnsiCodes): + BLACK = 30 + RED = 31 + GREEN = 32 + YELLOW = 33 + BLUE = 34 + MAGENTA = 35 + CYAN = 36 + WHITE = 37 + RESET = 39 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 90 + LIGHTRED_EX = 91 + LIGHTGREEN_EX = 92 + LIGHTYELLOW_EX = 93 + LIGHTBLUE_EX = 94 + LIGHTMAGENTA_EX = 95 + LIGHTCYAN_EX = 96 + LIGHTWHITE_EX = 97 + + +class AnsiBack(AnsiCodes): + BLACK = 40 + RED = 41 + GREEN = 42 + YELLOW = 43 + BLUE = 44 + MAGENTA = 45 + CYAN = 46 + WHITE = 47 + RESET = 49 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 100 + LIGHTRED_EX = 101 + LIGHTGREEN_EX = 102 + LIGHTYELLOW_EX = 103 + LIGHTBLUE_EX = 104 + LIGHTMAGENTA_EX = 105 + LIGHTCYAN_EX = 106 + LIGHTWHITE_EX = 107 + + +class AnsiStyle(AnsiCodes): + BRIGHT = 1 + DIM = 2 + NORMAL = 22 + RESET_ALL = 0 + +Fore = AnsiFore() +Back = AnsiBack() +Style = AnsiStyle() +Cursor = AnsiCursor() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/ansitowin32.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/ansitowin32.py new file mode 100644 index 0000000..a750d2a --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/ansitowin32.py @@ -0,0 +1,232 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import re +import sys +import os + +from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style +from .winterm import WinTerm, WinColor, WinStyle +from .win32 import windll, winapi_test + + +winterm = None +if windll is not None: + winterm = WinTerm() + + +def is_a_tty(stream): + return hasattr(stream, 'isatty') and stream.isatty() + + +class StreamWrapper(object): + ''' + Wraps a stream (such as stdout), acting as a transparent proxy for all + attribute access apart from method 'write()', which is delegated to our + Converter instance. + ''' + def __init__(self, wrapped, converter): + # double-underscore everything to prevent clashes with names of + # attributes on the wrapped stream object. + self.__wrapped = wrapped + self.__convertor = converter + + def __getattr__(self, name): + return getattr(self.__wrapped, name) + + def write(self, text): + self.__convertor.write(text) + + +class AnsiToWin32(object): + ''' + Implements a 'write()' method which, on Windows, will strip ANSI character + sequences from the text, and if outputting to a tty, will convert them into + win32 function calls. + ''' + ANSI_CSI_RE = re.compile('\001?\033\[((?:\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer + ANSI_OSC_RE = re.compile('\001?\033\]((?:.|;)*?)(\x07)\002?') # Operating System Command + + def __init__(self, wrapped, convert=None, strip=None, autoreset=False): + # The wrapped stream (normally sys.stdout or sys.stderr) + self.wrapped = wrapped + + # should we reset colors to defaults after every .write() + self.autoreset = autoreset + + # create the proxy wrapping our output stream + self.stream = StreamWrapper(wrapped, self) + + on_windows = os.name == 'nt' + # We test if the WinAPI works, because even if we are on Windows + # we may be using a terminal that doesn't support the WinAPI + # (e.g. Cygwin Terminal). In this case it's up to the terminal + # to support the ANSI codes. + conversion_supported = on_windows and winapi_test() + + # should we strip ANSI sequences from our output? + if strip is None: + strip = conversion_supported or (not wrapped.closed and not is_a_tty(wrapped)) + self.strip = strip + + # should we should convert ANSI sequences into win32 calls? + if convert is None: + convert = conversion_supported and not wrapped.closed and is_a_tty(wrapped) + self.convert = convert + + # dict of ansi codes to win32 functions and parameters + self.win32_calls = self.get_win32_calls() + + # are we wrapping stderr? + self.on_stderr = self.wrapped is sys.stderr + + def should_wrap(self): + ''' + True if this class is actually needed. If false, then the output + stream will not be affected, nor will win32 calls be issued, so + wrapping stdout is not actually required. This will generally be + False on non-Windows platforms, unless optional functionality like + autoreset has been requested using kwargs to init() + ''' + return self.convert or self.strip or self.autoreset + + def get_win32_calls(self): + if self.convert and winterm: + return { + AnsiStyle.RESET_ALL: (winterm.reset_all, ), + AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), + AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), + AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), + AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), + AnsiFore.RED: (winterm.fore, WinColor.RED), + AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), + AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), + AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), + AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), + AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), + AnsiFore.WHITE: (winterm.fore, WinColor.GREY), + AnsiFore.RESET: (winterm.fore, ), + AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), + AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), + AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), + AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), + AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), + AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), + AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), + AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), + AnsiBack.BLACK: (winterm.back, WinColor.BLACK), + AnsiBack.RED: (winterm.back, WinColor.RED), + AnsiBack.GREEN: (winterm.back, WinColor.GREEN), + AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), + AnsiBack.BLUE: (winterm.back, WinColor.BLUE), + AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), + AnsiBack.CYAN: (winterm.back, WinColor.CYAN), + AnsiBack.WHITE: (winterm.back, WinColor.GREY), + AnsiBack.RESET: (winterm.back, ), + AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), + AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), + AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), + AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), + AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), + AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), + AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), + AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), + } + return dict() + + def write(self, text): + if self.strip or self.convert: + self.write_and_convert(text) + else: + self.wrapped.write(text) + self.wrapped.flush() + if self.autoreset: + self.reset_all() + + + def reset_all(self): + if self.convert: + self.call_win32('m', (0,)) + elif not self.strip and not self.wrapped.closed: + self.wrapped.write(Style.RESET_ALL) + + + def write_and_convert(self, text): + ''' + Write the given text to our wrapped stream, stripping any ANSI + sequences from the text, and optionally converting them into win32 + calls. + ''' + cursor = 0 + text = self.convert_osc(text) + for match in self.ANSI_CSI_RE.finditer(text): + start, end = match.span() + self.write_plain_text(text, cursor, start) + self.convert_ansi(*match.groups()) + cursor = end + self.write_plain_text(text, cursor, len(text)) + + + def write_plain_text(self, text, start, end): + if start < end: + self.wrapped.write(text[start:end]) + self.wrapped.flush() + + + def convert_ansi(self, paramstring, command): + if self.convert: + params = self.extract_params(command, paramstring) + self.call_win32(command, params) + + + def extract_params(self, command, paramstring): + if command in 'Hf': + params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) + while len(params) < 2: + # defaults: + params = params + (1,) + else: + params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) + if len(params) == 0: + # defaults: + if command in 'JKm': + params = (0,) + elif command in 'ABCD': + params = (1,) + + return params + + + def call_win32(self, command, params): + if command == 'm': + for param in params: + if param in self.win32_calls: + func_args = self.win32_calls[param] + func = func_args[0] + args = func_args[1:] + kwargs = dict(on_stderr=self.on_stderr) + func(*args, **kwargs) + elif command in 'J': + winterm.erase_screen(params[0], on_stderr=self.on_stderr) + elif command in 'K': + winterm.erase_line(params[0], on_stderr=self.on_stderr) + elif command in 'Hf': # cursor position - absolute + winterm.set_cursor_position(params, on_stderr=self.on_stderr) + elif command in 'ABCD': # cursor position - relative + n = params[0] + # A - up, B - down, C - forward, D - back + x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] + winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) + + + def convert_osc(self, text): + for match in self.ANSI_OSC_RE.finditer(text): + start, end = match.span() + text = text[:start] + text[end:] + paramstring, command = match.groups() + if command in '\x07': # \x07 = BEL + params = paramstring.split(";") + # 0 - change title and icon (we will only change title) + # 1 - change icon (we don't support this) + # 2 - change title + if params[0] in '02': + winterm.set_title(params[1]) + return text diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/initialise.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/initialise.py new file mode 100644 index 0000000..4bce9f2 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/initialise.py @@ -0,0 +1,81 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import atexit +import contextlib +import sys + +from .ansitowin32 import AnsiToWin32 + + +orig_stdout = None +orig_stderr = None + +wrapped_stdout = None +wrapped_stderr = None + +atexit_done = False + + +def reset_all(): + AnsiToWin32(orig_stdout).reset_all() + + +def init(autoreset=False, convert=None, strip=None, wrap=True): + + if not wrap and any([autoreset, convert, strip]): + raise ValueError('wrap=False conflicts with any other arg=True') + + global wrapped_stdout, wrapped_stderr + global orig_stdout, orig_stderr + + orig_stdout = sys.stdout + orig_stderr = sys.stderr + + if sys.stdout is None: + wrapped_stdout = None + else: + sys.stdout = wrapped_stdout = \ + wrap_stream(orig_stdout, convert, strip, autoreset, wrap) + if sys.stderr is None: + wrapped_stderr = None + else: + sys.stderr = wrapped_stderr = \ + wrap_stream(orig_stderr, convert, strip, autoreset, wrap) + + global atexit_done + if not atexit_done: + atexit.register(reset_all) + atexit_done = True + + +def deinit(): + if orig_stdout is not None: + sys.stdout = orig_stdout + if orig_stderr is not None: + sys.stderr = orig_stderr + + +@contextlib.contextmanager +def colorama_text(*args, **kwargs): + init(*args, **kwargs) + try: + yield + finally: + deinit() + + +def reinit(): + if wrapped_stdout is not None: + sys.stdout = wrapped_stdout + if wrapped_stderr is not None: + sys.stderr = wrapped_stderr + + +def wrap_stream(stream, convert, strip, autoreset, wrap): + if wrap: + wrapper = AnsiToWin32(stream, + convert=convert, strip=strip, autoreset=autoreset) + if wrapper.should_wrap(): + stream = wrapper.stream + return stream + + diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/win32.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/win32.py new file mode 100644 index 0000000..3d1d2f2 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/win32.py @@ -0,0 +1,154 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +try: + import ctypes + from ctypes import LibraryLoader + windll = LibraryLoader(ctypes.WinDLL) + from ctypes import wintypes +except (AttributeError, ImportError): + windll = None + SetConsoleTextAttribute = lambda *_: None + winapi_test = lambda *_: None +else: + from ctypes import byref, Structure, c_char, POINTER + + COORD = wintypes._COORD + + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + def __str__(self): + return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( + self.dwSize.Y, self.dwSize.X + , self.dwCursorPosition.Y, self.dwCursorPosition.X + , self.wAttributes + , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right + , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X + ) + + _GetStdHandle = windll.kernel32.GetStdHandle + _GetStdHandle.argtypes = [ + wintypes.DWORD, + ] + _GetStdHandle.restype = wintypes.HANDLE + + _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + _GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + POINTER(CONSOLE_SCREEN_BUFFER_INFO), + ] + _GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + _SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + ] + _SetConsoleTextAttribute.restype = wintypes.BOOL + + _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition + _SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + COORD, + ] + _SetConsoleCursorPosition.restype = wintypes.BOOL + + _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA + _FillConsoleOutputCharacterA.argtypes = [ + wintypes.HANDLE, + c_char, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputCharacterA.restype = wintypes.BOOL + + _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute + _FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputAttribute.restype = wintypes.BOOL + + _SetConsoleTitleW = windll.kernel32.SetConsoleTitleA + _SetConsoleTitleW.argtypes = [ + wintypes.LPCSTR + ] + _SetConsoleTitleW.restype = wintypes.BOOL + + handles = { + STDOUT: _GetStdHandle(STDOUT), + STDERR: _GetStdHandle(STDERR), + } + + def winapi_test(): + handle = handles[STDOUT] + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return bool(success) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = handles[stream_id] + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = handles[stream_id] + return _SetConsoleTextAttribute(handle, attrs) + + def SetConsoleCursorPosition(stream_id, position, adjust=True): + position = COORD(*position) + # If the position is out of range, do nothing. + if position.Y <= 0 or position.X <= 0: + return + # Adjust for Windows' SetConsoleCursorPosition: + # 1. being 0-based, while ANSI is 1-based. + # 2. expecting (x,y), while ANSI uses (y,x). + adjusted_position = COORD(position.Y - 1, position.X - 1) + if adjust: + # Adjust for viewport's scroll position + sr = GetConsoleScreenBufferInfo(STDOUT).srWindow + adjusted_position.Y += sr.Top + adjusted_position.X += sr.Left + # Resume normal processing + handle = handles[stream_id] + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = handles[stream_id] + char = c_char(char.encode()) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + success = _FillConsoleOutputCharacterA( + handle, char, length, start, byref(num_written)) + return num_written.value + + def FillConsoleOutputAttribute(stream_id, attr, length, start): + ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' + handle = handles[stream_id] + attribute = wintypes.WORD(attr) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + return _FillConsoleOutputAttribute( + handle, attribute, length, start, byref(num_written)) + + def SetConsoleTitle(title): + return _SetConsoleTitleW(title) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/winterm.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/winterm.py new file mode 100644 index 0000000..60309d3 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/colorama/winterm.py @@ -0,0 +1,162 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from . import win32 + + +# from wincon.h +class WinColor(object): + BLACK = 0 + BLUE = 1 + GREEN = 2 + CYAN = 3 + RED = 4 + MAGENTA = 5 + YELLOW = 6 + GREY = 7 + +# from wincon.h +class WinStyle(object): + NORMAL = 0x00 # dim text, dim background + BRIGHT = 0x08 # bright text, dim background + BRIGHT_BACKGROUND = 0x80 # dim text, bright background + +class WinTerm(object): + + def __init__(self): + self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes + self.set_attrs(self._default) + self._default_fore = self._fore + self._default_back = self._back + self._default_style = self._style + # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. + # So that LIGHT_EX colors and BRIGHT style do not clobber each other, + # we track them separately, since LIGHT_EX is overwritten by Fore/Back + # and BRIGHT is overwritten by Style codes. + self._light = 0 + + def get_attrs(self): + return self._fore + self._back * 16 + (self._style | self._light) + + def set_attrs(self, value): + self._fore = value & 7 + self._back = (value >> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + if mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + if mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/__init__.py new file mode 100644 index 0000000..20a4e0c --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2014 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import logging + +__version__ = '0.2.1' + +class DistlibException(Exception): + pass + +try: + from logging import NullHandler +except ImportError: # pragma: no cover + class NullHandler(logging.Handler): + def handle(self, record): pass + def emit(self, record): pass + def createLock(self): self.lock = None + +logger = logging.getLogger(__name__) +logger.addHandler(NullHandler()) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__init__.py new file mode 100644 index 0000000..f7dbf4c --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__init__.py @@ -0,0 +1,6 @@ +"""Modules copied from Python 3 standard libraries, for internal use only. + +Individual classes and functions are found in d2._backport.misc. Intended +usage is to always import things missing from 3.1 from that module: the +built-in/stdlib objects will be used if found. +""" diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/misc.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/misc.py new file mode 100644 index 0000000..cfb318d --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/misc.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Backports for individual classes and functions.""" + +import os +import sys + +__all__ = ['cache_from_source', 'callable', 'fsencode'] + + +try: + from imp import cache_from_source +except ImportError: + def cache_from_source(py_file, debug=__debug__): + ext = debug and 'c' or 'o' + return py_file + ext + + +try: + callable = callable +except NameError: + from collections import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode +except AttributeError: + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, str): + return filename.encode(sys.getfilesystemencoding()) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/shutil.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/shutil.py new file mode 100644 index 0000000..9e2e234 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/shutil.py @@ -0,0 +1,761 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Utility functions for copying and archiving files and directory trees. + +XXX The functions here don't copy the resource fork or other metadata on Mac. + +""" + +import os +import sys +import stat +from os.path import abspath +import fnmatch +import collections +import errno +from . import tarfile + +try: + import bz2 + _BZ2_SUPPORTED = True +except ImportError: + _BZ2_SUPPORTED = False + +try: + from pwd import getpwnam +except ImportError: + getpwnam = None + +try: + from grp import getgrnam +except ImportError: + getgrnam = None + +__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", + "copytree", "move", "rmtree", "Error", "SpecialFileError", + "ExecError", "make_archive", "get_archive_formats", + "register_archive_format", "unregister_archive_format", + "get_unpack_formats", "register_unpack_format", + "unregister_unpack_format", "unpack_archive", "ignore_patterns"] + +class Error(EnvironmentError): + pass + +class SpecialFileError(EnvironmentError): + """Raised when trying to do a kind of operation (e.g. copying) which is + not supported on a special file (e.g. a named pipe)""" + +class ExecError(EnvironmentError): + """Raised when a command could not be executed""" + +class ReadError(EnvironmentError): + """Raised when an archive cannot be read""" + +class RegistryError(Exception): + """Raised when a registery operation with the archiving + and unpacking registeries fails""" + + +try: + WindowsError +except NameError: + WindowsError = None + +def copyfileobj(fsrc, fdst, length=16*1024): + """copy data from file-like object fsrc to file-like object fdst""" + while 1: + buf = fsrc.read(length) + if not buf: + break + fdst.write(buf) + +def _samefile(src, dst): + # Macintosh, Unix. + if hasattr(os.path, 'samefile'): + try: + return os.path.samefile(src, dst) + except OSError: + return False + + # All other platforms: check for same pathname. + return (os.path.normcase(os.path.abspath(src)) == + os.path.normcase(os.path.abspath(dst))) + +def copyfile(src, dst): + """Copy data from src to dst""" + if _samefile(src, dst): + raise Error("`%s` and `%s` are the same file" % (src, dst)) + + for fn in [src, dst]: + try: + st = os.stat(fn) + except OSError: + # File most likely does not exist + pass + else: + # XXX What about other special files? (sockets, devices...) + if stat.S_ISFIFO(st.st_mode): + raise SpecialFileError("`%s` is a named pipe" % fn) + + with open(src, 'rb') as fsrc: + with open(dst, 'wb') as fdst: + copyfileobj(fsrc, fdst) + +def copymode(src, dst): + """Copy mode bits from src to dst""" + if hasattr(os, 'chmod'): + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + os.chmod(dst, mode) + +def copystat(src, dst): + """Copy all stat info (mode bits, atime, mtime, flags) from src to dst""" + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + if hasattr(os, 'utime'): + os.utime(dst, (st.st_atime, st.st_mtime)) + if hasattr(os, 'chmod'): + os.chmod(dst, mode) + if hasattr(os, 'chflags') and hasattr(st, 'st_flags'): + try: + os.chflags(dst, st.st_flags) + except OSError as why: + if (not hasattr(errno, 'EOPNOTSUPP') or + why.errno != errno.EOPNOTSUPP): + raise + +def copy(src, dst): + """Copy data and mode bits ("cp src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copymode(src, dst) + +def copy2(src, dst): + """Copy data and all stat info ("cp -p src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copystat(src, dst) + +def ignore_patterns(*patterns): + """Function that can be used as copytree() ignore parameter. + + Patterns is a sequence of glob-style patterns + that are used to exclude files""" + def _ignore_patterns(path, names): + ignored_names = [] + for pattern in patterns: + ignored_names.extend(fnmatch.filter(names, pattern)) + return set(ignored_names) + return _ignore_patterns + +def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, + ignore_dangling_symlinks=False): + """Recursively copy a directory tree. + + The destination directory must not already exist. + If exception(s) occur, an Error is raised with a list of reasons. + + If the optional symlinks flag is true, symbolic links in the + source tree result in symbolic links in the destination tree; if + it is false, the contents of the files pointed to by symbolic + links are copied. If the file pointed by the symlink doesn't + exist, an exception will be added in the list of errors raised in + an Error exception at the end of the copy process. + + You can set the optional ignore_dangling_symlinks flag to true if you + want to silence this exception. Notice that this has no effect on + platforms that don't support os.symlink. + + The optional ignore argument is a callable. If given, it + is called with the `src` parameter, which is the directory + being visited by copytree(), and `names` which is the list of + `src` contents, as returned by os.listdir(): + + callable(src, names) -> ignored_names + + Since copytree() is called recursively, the callable will be + called once for each directory that is copied. It returns a + list of names relative to the `src` directory that should + not be copied. + + The optional copy_function argument is a callable that will be used + to copy each file. It will be called with the source path and the + destination path as arguments. By default, copy2() is used, but any + function that supports the same signature (like copy()) can be used. + + """ + names = os.listdir(src) + if ignore is not None: + ignored_names = ignore(src, names) + else: + ignored_names = set() + + os.makedirs(dst) + errors = [] + for name in names: + if name in ignored_names: + continue + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if os.path.islink(srcname): + linkto = os.readlink(srcname) + if symlinks: + os.symlink(linkto, dstname) + else: + # ignore dangling symlink if the flag is on + if not os.path.exists(linkto) and ignore_dangling_symlinks: + continue + # otherwise let the copy occurs. copy2 will raise an error + copy_function(srcname, dstname) + elif os.path.isdir(srcname): + copytree(srcname, dstname, symlinks, ignore, copy_function) + else: + # Will raise a SpecialFileError for unsupported file types + copy_function(srcname, dstname) + # catch the Error from the recursive copytree so that we can + # continue with other files + except Error as err: + errors.extend(err.args[0]) + except EnvironmentError as why: + errors.append((srcname, dstname, str(why))) + try: + copystat(src, dst) + except OSError as why: + if WindowsError is not None and isinstance(why, WindowsError): + # Copying file access times may fail on Windows + pass + else: + errors.extend((src, dst, str(why))) + if errors: + raise Error(errors) + +def rmtree(path, ignore_errors=False, onerror=None): + """Recursively delete a directory tree. + + If ignore_errors is set, errors are ignored; otherwise, if onerror + is set, it is called to handle the error with arguments (func, + path, exc_info) where func is os.listdir, os.remove, or os.rmdir; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If ignore_errors + is false and onerror is None, an exception is raised. + + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + try: + if os.path.islink(path): + # symlinks to directories are forbidden, see bug #1669 + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, path, sys.exc_info()) + # can't continue even if onerror hook returns + return + names = [] + try: + names = os.listdir(path) + except os.error: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + + +def _basename(path): + # A basename() variant which first strips the trailing slash, if present. + # Thus we always get the last component of the path, even for directories. + return os.path.basename(path.rstrip(os.path.sep)) + +def move(src, dst): + """Recursively move a file or directory to another location. This is + similar to the Unix "mv" command. + + If the destination is a directory or a symlink to a directory, the source + is moved inside the directory. The destination path must not already + exist. + + If the destination already exists but is not a directory, it may be + overwritten depending on os.rename() semantics. + + If the destination is on our current filesystem, then rename() is used. + Otherwise, src is copied to the destination and then removed. + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + real_dst = dst + if os.path.isdir(dst): + if _samefile(src, dst): + # We might be on a case insensitive filesystem, + # perform the rename anyway. + os.rename(src, dst) + return + + real_dst = os.path.join(dst, _basename(src)) + if os.path.exists(real_dst): + raise Error("Destination path '%s' already exists" % real_dst) + try: + os.rename(src, real_dst) + except OSError: + if os.path.isdir(src): + if _destinsrc(src, dst): + raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) + copytree(src, real_dst, symlinks=True) + rmtree(src) + else: + copy2(src, real_dst) + os.unlink(src) + +def _destinsrc(src, dst): + src = abspath(src) + dst = abspath(dst) + if not src.endswith(os.path.sep): + src += os.path.sep + if not dst.endswith(os.path.sep): + dst += os.path.sep + return dst.startswith(src) + +def _get_gid(name): + """Returns a gid, given a group name.""" + if getgrnam is None or name is None: + return None + try: + result = getgrnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _get_uid(name): + """Returns an uid, given a user name.""" + if getpwnam is None or name is None: + return None + try: + result = getpwnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, + owner=None, group=None, logger=None): + """Create a (possibly compressed) tar file from all the files under + 'base_dir'. + + 'compress' must be "gzip" (the default), "bzip2", or None. + + 'owner' and 'group' can be used to define an owner and a group for the + archive that is being built. If not provided, the current owner and group + will be used. + + The output tar file will be named 'base_name' + ".tar", possibly plus + the appropriate compression extension (".gz", or ".bz2"). + + Returns the output filename. + """ + tar_compression = {'gzip': 'gz', None: ''} + compress_ext = {'gzip': '.gz'} + + if _BZ2_SUPPORTED: + tar_compression['bzip2'] = 'bz2' + compress_ext['bzip2'] = '.bz2' + + # flags for compression program, each element of list will be an argument + if compress is not None and compress not in compress_ext: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) + + archive_name = base_name + '.tar' + compress_ext.get(compress, '') + archive_dir = os.path.dirname(archive_name) + + if not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # creating the tarball + if logger is not None: + logger.info('Creating tar archive') + + uid = _get_uid(owner) + gid = _get_gid(group) + + def _set_uid_gid(tarinfo): + if gid is not None: + tarinfo.gid = gid + tarinfo.gname = group + if uid is not None: + tarinfo.uid = uid + tarinfo.uname = owner + return tarinfo + + if not dry_run: + tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + try: + tar.add(base_dir, filter=_set_uid_gid) + finally: + tar.close() + + return archive_name + +def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False): + # XXX see if we want to keep an external call here + if verbose: + zipoptions = "-r" + else: + zipoptions = "-rq" + from distutils.errors import DistutilsExecError + from distutils.spawn import spawn + try: + spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run) + except DistutilsExecError: + # XXX really should distinguish between "couldn't find + # external 'zip' command" and "zip failed". + raise ExecError("unable to create zip file '%s': " + "could neither import the 'zipfile' module nor " + "find a standalone zip utility") % zip_filename + +def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): + """Create a zip file from all the files under 'base_dir'. + + The output zip file will be named 'base_name' + ".zip". Uses either the + "zipfile" Python module (if available) or the InfoZIP "zip" utility + (if installed and found on the default search path). If neither tool is + available, raises ExecError. Returns the name of the output zip + file. + """ + zip_filename = base_name + ".zip" + archive_dir = os.path.dirname(base_name) + + if not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # If zipfile module is not available, try spawning an external 'zip' + # command. + try: + import zipfile + except ImportError: + zipfile = None + + if zipfile is None: + _call_external_zip(base_dir, zip_filename, verbose, dry_run) + else: + if logger is not None: + logger.info("creating '%s' and adding '%s' to it", + zip_filename, base_dir) + + if not dry_run: + zip = zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) + + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zip.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + zip.close() + + return zip_filename + +_ARCHIVE_FORMATS = { + 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), + 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), + 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), + 'zip': (_make_zipfile, [], "ZIP file"), + } + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'ed tar-file") + +def get_archive_formats(): + """Returns a list of supported formats for archiving and unarchiving. + + Each element of the returned sequence is a tuple (name, description) + """ + formats = [(name, registry[2]) for name, registry in + _ARCHIVE_FORMATS.items()] + formats.sort() + return formats + +def register_archive_format(name, function, extra_args=None, description=''): + """Registers an archive format. + + name is the name of the format. function is the callable that will be + used to create archives. If provided, extra_args is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_archive_formats() function. + """ + if extra_args is None: + extra_args = [] + if not isinstance(function, collections.Callable): + raise TypeError('The %s object is not callable' % function) + if not isinstance(extra_args, (tuple, list)): + raise TypeError('extra_args needs to be a sequence') + for element in extra_args: + if not isinstance(element, (tuple, list)) or len(element) !=2: + raise TypeError('extra_args elements are : (arg_name, value)') + + _ARCHIVE_FORMATS[name] = (function, extra_args, description) + +def unregister_archive_format(name): + del _ARCHIVE_FORMATS[name] + +def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, + dry_run=0, owner=None, group=None, logger=None): + """Create an archive file (eg. zip or tar). + + 'base_name' is the name of the file to create, minus any format-specific + extension; 'format' is the archive format: one of "zip", "tar", "bztar" + or "gztar". + + 'root_dir' is a directory that will be the root directory of the + archive; ie. we typically chdir into 'root_dir' before creating the + archive. 'base_dir' is the directory where we start archiving from; + ie. 'base_dir' will be the common prefix of all files and + directories in the archive. 'root_dir' and 'base_dir' both default + to the current directory. Returns the name of the archive file. + + 'owner' and 'group' are used when creating a tar archive. By default, + uses the current owner and group. + """ + save_cwd = os.getcwd() + if root_dir is not None: + if logger is not None: + logger.debug("changing into '%s'", root_dir) + base_name = os.path.abspath(base_name) + if not dry_run: + os.chdir(root_dir) + + if base_dir is None: + base_dir = os.curdir + + kwargs = {'dry_run': dry_run, 'logger': logger} + + try: + format_info = _ARCHIVE_FORMATS[format] + except KeyError: + raise ValueError("unknown archive format '%s'" % format) + + func = format_info[0] + for arg, val in format_info[1]: + kwargs[arg] = val + + if format != 'zip': + kwargs['owner'] = owner + kwargs['group'] = group + + try: + filename = func(base_name, base_dir, **kwargs) + finally: + if root_dir is not None: + if logger is not None: + logger.debug("changing back to '%s'", save_cwd) + os.chdir(save_cwd) + + return filename + + +def get_unpack_formats(): + """Returns a list of supported formats for unpacking. + + Each element of the returned sequence is a tuple + (name, extensions, description) + """ + formats = [(name, info[0], info[3]) for name, info in + _UNPACK_FORMATS.items()] + formats.sort() + return formats + +def _check_unpack_options(extensions, function, extra_args): + """Checks what gets registered as an unpacker.""" + # first make sure no other unpacker is registered for this extension + existing_extensions = {} + for name, info in _UNPACK_FORMATS.items(): + for ext in info[0]: + existing_extensions[ext] = name + + for extension in extensions: + if extension in existing_extensions: + msg = '%s is already registered for "%s"' + raise RegistryError(msg % (extension, + existing_extensions[extension])) + + if not isinstance(function, collections.Callable): + raise TypeError('The registered function must be a callable') + + +def register_unpack_format(name, extensions, function, extra_args=None, + description=''): + """Registers an unpack format. + + `name` is the name of the format. `extensions` is a list of extensions + corresponding to the format. + + `function` is the callable that will be + used to unpack archives. The callable will receive archives to unpack. + If it's unable to handle an archive, it needs to raise a ReadError + exception. + + If provided, `extra_args` is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_unpack_formats() function. + """ + if extra_args is None: + extra_args = [] + _check_unpack_options(extensions, function, extra_args) + _UNPACK_FORMATS[name] = extensions, function, extra_args, description + +def unregister_unpack_format(name): + """Removes the pack format from the registery.""" + del _UNPACK_FORMATS[name] + +def _ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + +def _unpack_zipfile(filename, extract_dir): + """Unpack zip `filename` to `extract_dir` + """ + try: + import zipfile + except ImportError: + raise ReadError('zlib not supported, cannot unpack this archive.') + + if not zipfile.is_zipfile(filename): + raise ReadError("%s is not a zip file" % filename) + + zip = zipfile.ZipFile(filename) + try: + for info in zip.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name: + continue + + target = os.path.join(extract_dir, *name.split('/')) + if not target: + continue + + _ensure_directory(target) + if not name.endswith('/'): + # file + data = zip.read(info.filename) + f = open(target, 'wb') + try: + f.write(data) + finally: + f.close() + del data + finally: + zip.close() + +def _unpack_tarfile(filename, extract_dir): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise ReadError( + "%s is not a compressed or uncompressed tar file" % filename) + try: + tarobj.extractall(extract_dir) + finally: + tarobj.close() + +_UNPACK_FORMATS = { + 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), + 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), + 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") + } + +if _BZ2_SUPPORTED: + _UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], + "bzip2'ed tar-file") + +def _find_unpack_format(filename): + for name, info in _UNPACK_FORMATS.items(): + for extension in info[0]: + if filename.endswith(extension): + return name + return None + +def unpack_archive(filename, extract_dir=None, format=None): + """Unpack an archive. + + `filename` is the name of the archive. + + `extract_dir` is the name of the target directory, where the archive + is unpacked. If not provided, the current working directory is used. + + `format` is the archive format: one of "zip", "tar", or "gztar". Or any + other registered format. If not provided, unpack_archive will use the + filename extension and see if an unpacker was registered for that + extension. + + In case none is found, a ValueError is raised. + """ + if extract_dir is None: + extract_dir = os.getcwd() + + if format is not None: + try: + format_info = _UNPACK_FORMATS[format] + except KeyError: + raise ValueError("Unknown unpack format '{0}'".format(format)) + + func = format_info[1] + func(filename, extract_dir, **dict(format_info[2])) + else: + # we need to look at the registered unpackers supported extensions + format = _find_unpack_format(filename) + if format is None: + raise ReadError("Unknown archive format '{0}'".format(filename)) + + func = _UNPACK_FORMATS[format][1] + kwargs = dict(_UNPACK_FORMATS[format][2]) + func(filename, extract_dir, **kwargs) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg new file mode 100644 index 0000000..1746bd0 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg @@ -0,0 +1,84 @@ +[posix_prefix] +# Configuration directories. Some of these come straight out of the +# configure script. They are for implementing the other variables, not to +# be used directly in [resource_locations]. +confdir = /etc +datadir = /usr/share +libdir = /usr/lib +statedir = /var +# User resource directory +local = ~/.local/{distribution.name} + +stdlib = {base}/lib/python{py_version_short} +platstdlib = {platbase}/lib/python{py_version_short} +purelib = {base}/lib/python{py_version_short}/site-packages +platlib = {platbase}/lib/python{py_version_short}/site-packages +include = {base}/include/python{py_version_short}{abiflags} +platinclude = {platbase}/include/python{py_version_short}{abiflags} +data = {base} + +[posix_home] +stdlib = {base}/lib/python +platstdlib = {base}/lib/python +purelib = {base}/lib/python +platlib = {base}/lib/python +include = {base}/include/python +platinclude = {base}/include/python +scripts = {base}/bin +data = {base} + +[nt] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2_home] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[nt_user] +stdlib = {userbase}/Python{py_version_nodot} +platstdlib = {userbase}/Python{py_version_nodot} +purelib = {userbase}/Python{py_version_nodot}/site-packages +platlib = {userbase}/Python{py_version_nodot}/site-packages +include = {userbase}/Python{py_version_nodot}/Include +scripts = {userbase}/Scripts +data = {userbase} + +[posix_user] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[osx_framework_user] +stdlib = {userbase}/lib/python +platstdlib = {userbase}/lib/python +purelib = {userbase}/lib/python/site-packages +platlib = {userbase}/lib/python/site-packages +include = {userbase}/include +scripts = {userbase}/bin +data = {userbase} diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.py new file mode 100644 index 0000000..1d31326 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.py @@ -0,0 +1,788 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Access to Python's configuration information.""" + +import codecs +import os +import re +import sys +from os.path import pardir, realpath +try: + import configparser +except ImportError: + import ConfigParser as configparser + + +__all__ = [ + 'get_config_h_filename', + 'get_config_var', + 'get_config_vars', + 'get_makefile_filename', + 'get_path', + 'get_path_names', + 'get_paths', + 'get_platform', + 'get_python_version', + 'get_scheme_names', + 'parse_config_h', +] + + +def _safe_realpath(path): + try: + return realpath(path) + except OSError: + return path + + +if sys.executable: + _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) +else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + _PROJECT_BASE = _safe_realpath(os.getcwd()) + +if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) +# PC/VS7.1 +if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +# PC/AMD64 +if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) + + +def is_python_build(): + for fn in ("Setup.dist", "Setup.local"): + if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): + return True + return False + +_PYTHON_BUILD = is_python_build() + +_cfg_read = False + +def _ensure_cfg_read(): + global _cfg_read + if not _cfg_read: + from ..resources import finder + backport_package = __name__.rsplit('.', 1)[0] + _finder = finder(backport_package) + _cfgfile = _finder.find('sysconfig.cfg') + assert _cfgfile, 'sysconfig.cfg exists' + with _cfgfile.as_stream() as s: + _SCHEMES.readfp(s) + if _PYTHON_BUILD: + for scheme in ('posix_prefix', 'posix_home'): + _SCHEMES.set(scheme, 'include', '{srcdir}/Include') + _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.') + + _cfg_read = True + + +_SCHEMES = configparser.RawConfigParser() +_VAR_REPL = re.compile(r'\{([^{]*?)\}') + +def _expand_globals(config): + _ensure_cfg_read() + if config.has_section('globals'): + globals = config.items('globals') + else: + globals = tuple() + + sections = config.sections() + for section in sections: + if section == 'globals': + continue + for option, value in globals: + if config.has_option(section, option): + continue + config.set(section, option, value) + config.remove_section('globals') + + # now expanding local variables defined in the cfg file + # + for section in config.sections(): + variables = dict(config.items(section)) + + def _replacer(matchobj): + name = matchobj.group(1) + if name in variables: + return variables[name] + return matchobj.group(0) + + for option, value in config.items(section): + config.set(section, option, _VAR_REPL.sub(_replacer, value)) + +#_expand_globals(_SCHEMES) + + # FIXME don't rely on sys.version here, its format is an implementation detail + # of CPython, use sys.version_info or sys.hexversion +_PY_VERSION = sys.version.split()[0] +_PY_VERSION_SHORT = sys.version[:3] +_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] +_PREFIX = os.path.normpath(sys.prefix) +_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) +_CONFIG_VARS = None +_USER_BASE = None + + +def _subst_vars(path, local_vars): + """In the string `path`, replace tokens like {some.thing} with the + corresponding value from the map `local_vars`. + + If there is no corresponding value, leave the token unchanged. + """ + def _replacer(matchobj): + name = matchobj.group(1) + if name in local_vars: + return local_vars[name] + elif name in os.environ: + return os.environ[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, path) + + +def _extend_dict(target_dict, other_dict): + target_keys = target_dict.keys() + for key, value in other_dict.items(): + if key in target_keys: + continue + target_dict[key] = value + + +def _expand_vars(scheme, vars): + res = {} + if vars is None: + vars = {} + _extend_dict(vars, get_config_vars()) + + for key, value in _SCHEMES.items(scheme): + if os.name in ('posix', 'nt'): + value = os.path.expanduser(value) + res[key] = os.path.normpath(_subst_vars(value, vars)) + return res + + +def format_value(value, vars): + def _replacer(matchobj): + name = matchobj.group(1) + if name in vars: + return vars[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, value) + + +def _get_default_scheme(): + if os.name == 'posix': + # the default scheme for posix is posix_prefix + return 'posix_prefix' + return os.name + + +def _getuserbase(): + env_base = os.environ.get("PYTHONUSERBASE", None) + + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + + # what about 'os2emx', 'riscos' ? + if os.name == "nt": + base = os.environ.get("APPDATA") or "~" + if env_base: + return env_base + else: + return joinuser(base, "Python") + + if sys.platform == "darwin": + framework = get_config_var("PYTHONFRAMEWORK") + if framework: + if env_base: + return env_base + else: + return joinuser("~", "Library", framework, "%d.%d" % + sys.version_info[:2]) + + if env_base: + return env_base + else: + return joinuser("~", ".local") + + +def _parse_makefile(filename, vars=None): + """Parse a Makefile-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + # Regexes needed for parsing Makefile (and similar syntaxes, + # like old-style Setup files). + _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") + _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") + _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") + + if vars is None: + vars = {} + done = {} + notdone = {} + + with codecs.open(filename, encoding='utf-8', errors="surrogateescape") as f: + lines = f.readlines() + + for line in lines: + if line.startswith('#') or line.strip() == '': + continue + m = _variable_rx.match(line) + if m: + n, v = m.group(1, 2) + v = v.strip() + # `$$' is a literal `$' in make + tmpv = v.replace('$$', '') + + if "$" in tmpv: + notdone[n] = v + else: + try: + v = int(v) + except ValueError: + # insert literal `$' + done[n] = v.replace('$$', '$') + else: + done[n] = v + + # do variable interpolation here + variables = list(notdone.keys()) + + # Variables with a 'PY_' prefix in the makefile. These need to + # be made available without that prefix through sysconfig. + # Special care is needed to ensure that variable expansion works, even + # if the expansion uses the name without a prefix. + renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') + + while len(variables) > 0: + for name in tuple(variables): + value = notdone[name] + m = _findvar1_rx.search(value) or _findvar2_rx.search(value) + if m is not None: + n = m.group(1) + found = True + if n in done: + item = str(done[n]) + elif n in notdone: + # get it on a subsequent round + found = False + elif n in os.environ: + # do it like make: fall back to environment + item = os.environ[n] + + elif n in renamed_variables: + if (name.startswith('PY_') and + name[3:] in renamed_variables): + item = "" + + elif 'PY_' + n in notdone: + found = False + + else: + item = str(done['PY_' + n]) + + else: + done[n] = item = "" + + if found: + after = value[m.end():] + value = value[:m.start()] + item + after + if "$" in after: + notdone[name] = value + else: + try: + value = int(value) + except ValueError: + done[name] = value.strip() + else: + done[name] = value + variables.remove(name) + + if (name.startswith('PY_') and + name[3:] in renamed_variables): + + name = name[3:] + if name not in done: + done[name] = value + + else: + # bogus variable reference (e.g. "prefix=$/opt/python"); + # just drop it since we can't deal + done[name] = value + variables.remove(name) + + # strip spurious spaces + for k, v in done.items(): + if isinstance(v, str): + done[k] = v.strip() + + # save the results in the global dictionary + vars.update(done) + return vars + + +def get_makefile_filename(): + """Return the path of the Makefile.""" + if _PYTHON_BUILD: + return os.path.join(_PROJECT_BASE, "Makefile") + if hasattr(sys, 'abiflags'): + config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) + else: + config_dir_name = 'config' + return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') + + +def _init_posix(vars): + """Initialize the module as appropriate for POSIX systems.""" + # load the installed Makefile: + makefile = get_makefile_filename() + try: + _parse_makefile(makefile, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % makefile + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # load the installed pyconfig.h: + config_h = get_config_h_filename() + try: + with open(config_h) as f: + parse_config_h(f, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % config_h + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # On AIX, there are wrong paths to the linker scripts in the Makefile + # -- these paths are relative to the Python source, but when installed + # the scripts are in another directory. + if _PYTHON_BUILD: + vars['LDSHARED'] = vars['BLDSHARED'] + + +def _init_non_posix(vars): + """Initialize the module as appropriate for NT""" + # set basic install directories + vars['LIBDEST'] = get_path('stdlib') + vars['BINLIBDEST'] = get_path('platstdlib') + vars['INCLUDEPY'] = get_path('include') + vars['SO'] = '.pyd' + vars['EXE'] = '.exe' + vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT + vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) + +# +# public APIs +# + + +def parse_config_h(fp, vars=None): + """Parse a config.h-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + if vars is None: + vars = {} + define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") + undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") + + while True: + line = fp.readline() + if not line: + break + m = define_rx.match(line) + if m: + n, v = m.group(1, 2) + try: + v = int(v) + except ValueError: + pass + vars[n] = v + else: + m = undef_rx.match(line) + if m: + vars[m.group(1)] = 0 + return vars + + +def get_config_h_filename(): + """Return the path of pyconfig.h.""" + if _PYTHON_BUILD: + if os.name == "nt": + inc_dir = os.path.join(_PROJECT_BASE, "PC") + else: + inc_dir = _PROJECT_BASE + else: + inc_dir = get_path('platinclude') + return os.path.join(inc_dir, 'pyconfig.h') + + +def get_scheme_names(): + """Return a tuple containing the schemes names.""" + return tuple(sorted(_SCHEMES.sections())) + + +def get_path_names(): + """Return a tuple containing the paths names.""" + # xxx see if we want a static list + return _SCHEMES.options('posix_prefix') + + +def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): + """Return a mapping containing an install scheme. + + ``scheme`` is the install scheme name. If not provided, it will + return the default scheme for the current platform. + """ + _ensure_cfg_read() + if expand: + return _expand_vars(scheme, vars) + else: + return dict(_SCHEMES.items(scheme)) + + +def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): + """Return a path corresponding to the scheme. + + ``scheme`` is the install scheme name. + """ + return get_paths(scheme, vars, expand)[name] + + +def get_config_vars(*args): + """With no arguments, return a dictionary of all configuration + variables relevant for the current platform. + + On Unix, this means every variable defined in Python's installed Makefile; + On Windows and Mac OS it's a much smaller set. + + With arguments, return a list of values that result from looking up + each argument in the configuration variable dictionary. + """ + global _CONFIG_VARS + if _CONFIG_VARS is None: + _CONFIG_VARS = {} + # Normalized versions of prefix and exec_prefix are handy to have; + # in fact, these are the standard versions used most places in the + # distutils2 module. + _CONFIG_VARS['prefix'] = _PREFIX + _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX + _CONFIG_VARS['py_version'] = _PY_VERSION + _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT + _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] + _CONFIG_VARS['base'] = _PREFIX + _CONFIG_VARS['platbase'] = _EXEC_PREFIX + _CONFIG_VARS['projectbase'] = _PROJECT_BASE + try: + _CONFIG_VARS['abiflags'] = sys.abiflags + except AttributeError: + # sys.abiflags may not be defined on all platforms. + _CONFIG_VARS['abiflags'] = '' + + if os.name in ('nt', 'os2'): + _init_non_posix(_CONFIG_VARS) + if os.name == 'posix': + _init_posix(_CONFIG_VARS) + # Setting 'userbase' is done below the call to the + # init function to enable using 'get_config_var' in + # the init-function. + if sys.version >= '2.6': + _CONFIG_VARS['userbase'] = _getuserbase() + + if 'srcdir' not in _CONFIG_VARS: + _CONFIG_VARS['srcdir'] = _PROJECT_BASE + else: + _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir']) + + # Convert srcdir into an absolute path if it appears necessary. + # Normally it is relative to the build directory. However, during + # testing, for example, we might be running a non-installed python + # from a different directory. + if _PYTHON_BUILD and os.name == "posix": + base = _PROJECT_BASE + try: + cwd = os.getcwd() + except OSError: + cwd = None + if (not os.path.isabs(_CONFIG_VARS['srcdir']) and + base != cwd): + # srcdir is relative and we are not in the same directory + # as the executable. Assume executable is in the build + # directory and make srcdir absolute. + srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) + _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) + + if sys.platform == 'darwin': + kernel_version = os.uname()[2] # Kernel version (8.4.3) + major_version = int(kernel_version.split('.')[0]) + + if major_version < 8: + # On Mac OS X before 10.4, check if -arch and -isysroot + # are in CFLAGS or LDFLAGS and remove them if they are. + # This is needed when building extensions on a 10.3 system + # using a universal build of python. + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + flags = _CONFIG_VARS[key] + flags = re.sub('-arch\s+\w+\s', ' ', flags) + flags = re.sub('-isysroot [^ \t]*', ' ', flags) + _CONFIG_VARS[key] = flags + else: + # Allow the user to override the architecture flags using + # an environment variable. + # NOTE: This name was introduced by Apple in OSX 10.5 and + # is used by several scripting languages distributed with + # that OS release. + if 'ARCHFLAGS' in os.environ: + arch = os.environ['ARCHFLAGS'] + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub('-arch\s+\w+\s', ' ', flags) + flags = flags + ' ' + arch + _CONFIG_VARS[key] = flags + + # If we're on OSX 10.5 or later and the user tries to + # compiles an extension using an SDK that is not present + # on the current machine it is better to not use an SDK + # than to fail. + # + # The major usecase for this is users using a Python.org + # binary installer on OSX 10.6: that installer uses + # the 10.4u SDK, but that SDK is not installed by default + # when you install Xcode. + # + CFLAGS = _CONFIG_VARS.get('CFLAGS', '') + m = re.search('-isysroot\s+(\S+)', CFLAGS) + if m is not None: + sdk = m.group(1) + if not os.path.exists(sdk): + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags) + _CONFIG_VARS[key] = flags + + if args: + vals = [] + for name in args: + vals.append(_CONFIG_VARS.get(name)) + return vals + else: + return _CONFIG_VARS + + +def get_config_var(name): + """Return the value of a single variable using the dictionary returned by + 'get_config_vars()'. + + Equivalent to get_config_vars().get(name) + """ + return get_config_vars().get(name) + + +def get_platform(): + """Return a string that identifies the current platform. + + This is used mainly to distinguish platform-specific build directories and + platform-specific built distributions. Typically includes the OS name + and version and the architecture (as supplied by 'os.uname()'), + although the exact information included depends on the OS; eg. for IRIX + the architecture isn't particularly important (IRIX only runs on SGI + hardware), but for Linux the kernel version isn't particularly + important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + irix-5.3 + irix64-6.2 + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win-ia64 (64bit Windows on Itanium) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + """ + if os.name == 'nt': + # sniff sys.version for architecture. + prefix = " bit (" + i = sys.version.find(prefix) + if i == -1: + return sys.platform + j = sys.version.find(")", i) + look = sys.version[i+len(prefix):j].lower() + if look == 'amd64': + return 'win-amd64' + if look == 'itanium': + return 'win-ia64' + return sys.platform + + if os.name != "posix" or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + osname, host, release, version, machine = os.uname() + + # Convert the OS name to lowercase, remove '/' characters + # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_') + machine = machine.replace('/', '-') + + if osname[:5] == "linux": + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + elif osname[:5] == "sunos": + if release[0] >= "5": # SunOS 5 == Solaris 2 + osname = "solaris" + release = "%d.%s" % (int(release[0]) - 3, release[2:]) + # fall through to standard osname-release-machine representation + elif osname[:4] == "irix": # could be "irix64"! + return "%s-%s" % (osname, release) + elif osname[:3] == "aix": + return "%s-%s.%s" % (osname, version, release) + elif osname[:6] == "cygwin": + osname = "cygwin" + rel_re = re.compile(r'[\d.]+') + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == "darwin": + # + # For our purposes, we'll assume that the system version from + # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set + # to. This makes the compatibility story a bit more sane because the + # machine is going to compile and link as if it were + # MACOSX_DEPLOYMENT_TARGET. + cfgvars = get_config_vars() + macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') + + if True: + # Always calculate the release of the running machine, + # needed to determine if we can build fat binaries or not. + + macrelease = macver + # Get the system version. Reading this plist is a documented + # way to get the system version (see the documentation for + # the Gestalt Manager) + try: + f = open('/System/Library/CoreServices/SystemVersion.plist') + except IOError: + # We're on a plain darwin box, fall back to the default + # behaviour. + pass + else: + try: + m = re.search(r'ProductUserVisibleVersion\s*' + r'(.*?)', f.read()) + finally: + f.close() + if m is not None: + macrelease = '.'.join(m.group(1).split('.')[:2]) + # else: fall back to the default behaviour + + if not macver: + macver = macrelease + + if macver: + release = macver + osname = "macosx" + + if ((macrelease + '.') >= '10.4.' and + '-arch' in get_config_vars().get('CFLAGS', '').strip()): + # The universal build will build fat binaries, but not on + # systems before 10.4 + # + # Try to detect 4-way universal builds, those have machine-type + # 'universal' instead of 'fat'. + + machine = 'fat' + cflags = get_config_vars().get('CFLAGS') + + archs = re.findall('-arch\s+(\S+)', cflags) + archs = tuple(sorted(set(archs))) + + if len(archs) == 1: + machine = archs[0] + elif archs == ('i386', 'ppc'): + machine = 'fat' + elif archs == ('i386', 'x86_64'): + machine = 'intel' + elif archs == ('i386', 'ppc', 'x86_64'): + machine = 'fat3' + elif archs == ('ppc64', 'x86_64'): + machine = 'fat64' + elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): + machine = 'universal' + else: + raise ValueError( + "Don't know machine value for archs=%r" % (archs,)) + + elif machine == 'i386': + # On OSX the machine type returned by uname is always the + # 32-bit variant, even if the executable architecture is + # the 64-bit variant + if sys.maxsize >= 2**32: + machine = 'x86_64' + + elif machine in ('PowerPC', 'Power_Macintosh'): + # Pick a sane name for the PPC architecture. + # See 'i386' case + if sys.maxsize >= 2**32: + machine = 'ppc64' + else: + machine = 'ppc' + + return "%s-%s-%s" % (osname, release, machine) + + +def get_python_version(): + return _PY_VERSION_SHORT + + +def _print_dict(title, data): + for index, (key, value) in enumerate(sorted(data.items())): + if index == 0: + print('%s: ' % (title)) + print('\t%s = "%s"' % (key, value)) + + +def _main(): + """Display all information sysconfig detains.""" + print('Platform: "%s"' % get_platform()) + print('Python version: "%s"' % get_python_version()) + print('Current installation scheme: "%s"' % _get_default_scheme()) + print() + _print_dict('Paths', get_paths()) + print() + _print_dict('Variables', get_config_vars()) + + +if __name__ == '__main__': + _main() diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/tarfile.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/tarfile.py new file mode 100644 index 0000000..0580fb7 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/tarfile.py @@ -0,0 +1,2607 @@ +#------------------------------------------------------------------- +# tarfile.py +#------------------------------------------------------------------- +# Copyright (C) 2002 Lars Gustaebel +# All rights reserved. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +from __future__ import print_function + +"""Read from and write to tar format archives. +""" + +__version__ = "$Revision$" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__date__ = "$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $" +__cvsid__ = "$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +import sys +import os +import stat +import errno +import time +import struct +import copy +import re + +try: + import grp, pwd +except ImportError: + grp = pwd = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +symlink_exception = (AttributeError, NotImplementedError) +try: + # WindowsError (1314) will be raised if the caller does not hold the + # SeCreateSymbolicLinkPrivilege privilege + symlink_exception += (WindowsError,) +except NameError: + pass + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"] + +if sys.version_info[0] < 3: + import __builtin__ as builtins +else: + import builtins + +_open = builtins.open # Since 'open' is TarFile.open + +#--------------------------------------------------------- +# tar constants +#--------------------------------------------------------- +NUL = b"\0" # the null character +BLOCKSIZE = 512 # length of processing blocks +RECORDSIZE = BLOCKSIZE * 20 # length of records +GNU_MAGIC = b"ustar \0" # magic gnu tar string +POSIX_MAGIC = b"ustar\x0000" # magic posix tar string + +LENGTH_NAME = 100 # maximum length of a filename +LENGTH_LINK = 100 # maximum length of a linkname +LENGTH_PREFIX = 155 # maximum length of the prefix field + +REGTYPE = b"0" # regular file +AREGTYPE = b"\0" # regular file +LNKTYPE = b"1" # link (inside tarfile) +SYMTYPE = b"2" # symbolic link +CHRTYPE = b"3" # character special device +BLKTYPE = b"4" # block special device +DIRTYPE = b"5" # directory +FIFOTYPE = b"6" # fifo special device +CONTTYPE = b"7" # contiguous file + +GNUTYPE_LONGNAME = b"L" # GNU tar longname +GNUTYPE_LONGLINK = b"K" # GNU tar longlink +GNUTYPE_SPARSE = b"S" # GNU tar sparse file + +XHDTYPE = b"x" # POSIX.1-2001 extended header +XGLTYPE = b"g" # POSIX.1-2001 global header +SOLARIS_XHDTYPE = b"X" # Solaris extended header + +USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format +GNU_FORMAT = 1 # GNU tar format +PAX_FORMAT = 2 # POSIX.1-2001 (pax) format +DEFAULT_FORMAT = GNU_FORMAT + +#--------------------------------------------------------- +# tarfile constants +#--------------------------------------------------------- +# File types that tarfile supports: +SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, + SYMTYPE, DIRTYPE, FIFOTYPE, + CONTTYPE, CHRTYPE, BLKTYPE, + GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# File types that will be treated as a regular file. +REGULAR_TYPES = (REGTYPE, AREGTYPE, + CONTTYPE, GNUTYPE_SPARSE) + +# File types that are part of the GNU tar format. +GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# Fields from a pax header that override a TarInfo attribute. +PAX_FIELDS = ("path", "linkpath", "size", "mtime", + "uid", "gid", "uname", "gname") + +# Fields from a pax header that are affected by hdrcharset. +PAX_NAME_FIELDS = set(("path", "linkpath", "uname", "gname")) + +# Fields in a pax header that are numbers, all other fields +# are treated as strings. +PAX_NUMBER_FIELDS = { + "atime": float, + "ctime": float, + "mtime": float, + "uid": int, + "gid": int, + "size": int +} + +#--------------------------------------------------------- +# Bits used in the mode field, values in octal. +#--------------------------------------------------------- +S_IFLNK = 0o120000 # symbolic link +S_IFREG = 0o100000 # regular file +S_IFBLK = 0o060000 # block device +S_IFDIR = 0o040000 # directory +S_IFCHR = 0o020000 # character device +S_IFIFO = 0o010000 # fifo + +TSUID = 0o4000 # set UID on execution +TSGID = 0o2000 # set GID on execution +TSVTX = 0o1000 # reserved + +TUREAD = 0o400 # read by owner +TUWRITE = 0o200 # write by owner +TUEXEC = 0o100 # execute/search by owner +TGREAD = 0o040 # read by group +TGWRITE = 0o020 # write by group +TGEXEC = 0o010 # execute/search by group +TOREAD = 0o004 # read by other +TOWRITE = 0o002 # write by other +TOEXEC = 0o001 # execute/search by other + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name in ("nt", "ce"): + ENCODING = "utf-8" +else: + ENCODING = sys.getfilesystemencoding() + +#--------------------------------------------------------- +# Some useful functions +#--------------------------------------------------------- + +def stn(s, length, encoding, errors): + """Convert a string to a null-terminated bytes object. + """ + s = s.encode(encoding, errors) + return s[:length] + (length - len(s)) * NUL + +def nts(s, encoding, errors): + """Convert a null-terminated bytes object to a string. + """ + p = s.find(b"\0") + if p != -1: + s = s[:p] + return s.decode(encoding, errors) + +def nti(s): + """Convert a number field to a python number. + """ + # There are two possible encodings for a number field, see + # itn() below. + if s[0] != chr(0o200): + try: + n = int(nts(s, "ascii", "strict") or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + else: + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += ord(s[i + 1]) + return n + +def itn(n, digits=8, format=DEFAULT_FORMAT): + """Convert a python number to a number field. + """ + # POSIX 1003.1-1988 requires numbers to be encoded as a string of + # octal digits followed by a null-byte, this allows values up to + # (8**(digits-1))-1. GNU tar allows storing numbers greater than + # that if necessary. A leading 0o200 byte indicates this particular + # encoding, the following digits-1 bytes are a big-endian + # representation. This allows values up to (256**(digits-1))-1. + if 0 <= n < 8 ** (digits - 1): + s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL + else: + if format != GNU_FORMAT or n >= 256 ** (digits - 1): + raise ValueError("overflow in number field") + + if n < 0: + # XXX We mimic GNU tar's behaviour with negative numbers, + # this could raise OverflowError. + n = struct.unpack("L", struct.pack("l", n))[0] + + s = bytearray() + for i in range(digits - 1): + s.insert(0, n & 0o377) + n >>= 8 + s.insert(0, 0o200) + return s + +def calc_chksums(buf): + """Calculate the checksum for a member's header by summing up all + characters except for the chksum field which is treated as if + it was filled with spaces. According to the GNU tar sources, + some tars (Sun and NeXT) calculate chksum with signed char, + which will be different if there are chars in the buffer with + the high bit set. So we calculate two checksums, unsigned and + signed. + """ + unsigned_chksum = 256 + sum(struct.unpack("148B", buf[:148]) + struct.unpack("356B", buf[156:512])) + signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512])) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + if length == 0: + return + if length is None: + while True: + buf = src.read(16*1024) + if not buf: + break + dst.write(buf) + return + + BUFSIZE = 16 * 1024 + blocks, remainder = divmod(length, BUFSIZE) + for b in range(blocks): + buf = src.read(BUFSIZE) + if len(buf) < BUFSIZE: + raise IOError("end of file reached") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise IOError("end of file reached") + dst.write(buf) + return + +filemode_table = ( + ((S_IFLNK, "l"), + (S_IFREG, "-"), + (S_IFBLK, "b"), + (S_IFDIR, "d"), + (S_IFCHR, "c"), + (S_IFIFO, "p")), + + ((TUREAD, "r"),), + ((TUWRITE, "w"),), + ((TUEXEC|TSUID, "s"), + (TSUID, "S"), + (TUEXEC, "x")), + + ((TGREAD, "r"),), + ((TGWRITE, "w"),), + ((TGEXEC|TSGID, "s"), + (TSGID, "S"), + (TGEXEC, "x")), + + ((TOREAD, "r"),), + ((TOWRITE, "w"),), + ((TOEXEC|TSVTX, "t"), + (TSVTX, "T"), + (TOEXEC, "x")) +) + +def filemode(mode): + """Convert a file's mode to a string of the form + -rwxrwxrwx. + Used by TarFile.list() + """ + perm = [] + for table in filemode_table: + for bit, char in table: + if mode & bit == bit: + perm.append(char) + break + else: + perm.append("-") + return "".join(perm) + +class TarError(Exception): + """Base exception.""" + pass +class ExtractError(TarError): + """General exception for extract errors.""" + pass +class ReadError(TarError): + """Exception for unreadble tar archives.""" + pass +class CompressionError(TarError): + """Exception for unavailable compression methods.""" + pass +class StreamError(TarError): + """Exception for unsupported operations on stream-like TarFiles.""" + pass +class HeaderError(TarError): + """Base exception for header errors.""" + pass +class EmptyHeaderError(HeaderError): + """Exception for empty headers.""" + pass +class TruncatedHeaderError(HeaderError): + """Exception for truncated headers.""" + pass +class EOFHeaderError(HeaderError): + """Exception for end of file headers.""" + pass +class InvalidHeaderError(HeaderError): + """Exception for invalid headers.""" + pass +class SubsequentHeaderError(HeaderError): + """Exception for missing and invalid extended headers.""" + pass + +#--------------------------- +# internal stream interface +#--------------------------- +class _LowLevelFile(object): + """Low-level file object. Supports reading and writing. + It is used instead of a regular file object for streaming + access. + """ + + def __init__(self, name, mode): + mode = { + "r": os.O_RDONLY, + "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, + }[mode] + if hasattr(os, "O_BINARY"): + mode |= os.O_BINARY + self.fd = os.open(name, mode, 0o666) + + def close(self): + os.close(self.fd) + + def read(self, size): + return os.read(self.fd, size) + + def write(self, s): + os.write(self.fd, s) + +class _Stream(object): + """Class that serves as an adapter between TarFile and + a stream-like object. The stream-like object only + needs to have a read() or write() method and is accessed + blockwise. Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin, + sys.stdout, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize): + """Construct a _Stream object. + """ + self._extfileobj = True + if fileobj is None: + fileobj = _LowLevelFile(name, mode) + self._extfileobj = False + + if comptype == '*': + # Enable transparent compression detection for the + # stream interface + fileobj = _StreamProxy(fileobj) + comptype = fileobj.getcomptype() + + self.name = name or "" + self.mode = mode + self.comptype = comptype + self.fileobj = fileobj + self.bufsize = bufsize + self.buf = b"" + self.pos = 0 + self.closed = False + + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self._init_read_gz() + else: + self._init_write_gz() + + if comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + else: + self.cmp = bz2.BZ2Compressor() + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + def __del__(self): + if hasattr(self, "closed") and not self.closed: + self.close() + + def _init_write_gz(self): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(9, self.zlib.DEFLATED, + -self.zlib.MAX_WBITS, + self.zlib.DEF_MEM_LEVEL, + 0) + timestamp = struct.pack(" self.bufsize: + self.fileobj.write(self.buf[:self.bufsize]) + self.buf = self.buf[self.bufsize:] + + def close(self): + """Close the _Stream object. No operation should be + done on it afterwards. + """ + if self.closed: + return + + if self.mode == "w" and self.comptype != "tar": + self.buf += self.cmp.flush() + + if self.mode == "w" and self.buf: + self.fileobj.write(self.buf) + self.buf = b"" + if self.comptype == "gz": + # The native zlib crc is an unsigned 32-bit integer, but + # the Python wrapper implicitly casts that to a signed C + # long. So, on a 32-bit box self.crc may "look negative", + # while the same crc on a 64-bit box may "look positive". + # To avoid irksome warnings from the `struct` module, force + # it to look positive on all boxes. + self.fileobj.write(struct.pack("= 0: + blocks, remainder = divmod(pos - self.pos, self.bufsize) + for i in range(blocks): + self.read(self.bufsize) + self.read(remainder) + else: + raise StreamError("seeking backwards is not allowed") + return self.pos + + def read(self, size=None): + """Return the next size number of bytes from the stream. + If size is not defined, return all bytes of the stream + up to EOF. + """ + if size is None: + t = [] + while True: + buf = self._read(self.bufsize) + if not buf: + break + t.append(buf) + buf = "".join(t) + else: + buf = self._read(size) + self.pos += len(buf) + return buf + + def _read(self, size): + """Return size bytes from the stream. + """ + if self.comptype == "tar": + return self.__read(size) + + c = len(self.dbuf) + while c < size: + buf = self.__read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except IOError: + raise ReadError("invalid compressed data") + self.dbuf += buf + c += len(buf) + buf = self.dbuf[:size] + self.dbuf = self.dbuf[size:] + return buf + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + self.buf += buf + c += len(buf) + buf = self.buf[:size] + self.buf = self.buf[size:] + return buf +# class _Stream + +class _StreamProxy(object): + """Small proxy class that enables transparent compression + detection for the Stream interface (mode 'r|*'). + """ + + def __init__(self, fileobj): + self.fileobj = fileobj + self.buf = self.fileobj.read(BLOCKSIZE) + + def read(self, size): + self.read = self.fileobj.read + return self.buf + + def getcomptype(self): + if self.buf.startswith(b"\037\213\010"): + return "gz" + if self.buf.startswith(b"BZh91"): + return "bz2" + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +class _BZ2Proxy(object): + """Small proxy class that enables external file object + support for "r:bz2" and "w:bz2" modes. This is actually + a workaround for a limitation in bz2 module's BZ2File + class which (unlike gzip.GzipFile) has no support for + a file object argument. + """ + + blocksize = 16 * 1024 + + def __init__(self, fileobj, mode): + self.fileobj = fileobj + self.mode = mode + self.name = getattr(self.fileobj, "name", None) + self.init() + + def init(self): + import bz2 + self.pos = 0 + if self.mode == "r": + self.bz2obj = bz2.BZ2Decompressor() + self.fileobj.seek(0) + self.buf = b"" + else: + self.bz2obj = bz2.BZ2Compressor() + + def read(self, size): + x = len(self.buf) + while x < size: + raw = self.fileobj.read(self.blocksize) + if not raw: + break + data = self.bz2obj.decompress(raw) + self.buf += data + x += len(data) + + buf = self.buf[:size] + self.buf = self.buf[size:] + self.pos += len(buf) + return buf + + def seek(self, pos): + if pos < self.pos: + self.init() + self.read(pos - self.pos) + + def tell(self): + return self.pos + + def write(self, data): + self.pos += len(data) + raw = self.bz2obj.compress(data) + self.fileobj.write(raw) + + def close(self): + if self.mode == "w": + raw = self.bz2obj.flush() + self.fileobj.write(raw) +# class _BZ2Proxy + +#------------------------ +# Extraction file object +#------------------------ +class _FileInFile(object): + """A thin wrapper around an existing file object that + provides a part of its data as an individual file + object. + """ + + def __init__(self, fileobj, offset, size, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + + if blockinfo is None: + blockinfo = [(0, size)] + + # Construct a map with data and zero blocks. + self.map_index = 0 + self.map = [] + lastpos = 0 + realpos = self.offset + for offset, size in blockinfo: + if offset > lastpos: + self.map.append((False, lastpos, offset, None)) + self.map.append((True, offset, offset + size, realpos)) + realpos += size + lastpos = offset + size + if lastpos < self.size: + self.map.append((False, lastpos, self.size, None)) + + def seekable(self): + if not hasattr(self.fileobj, "seekable"): + # XXX gzip.GzipFile and bz2.BZ2File + return True + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position): + """Seek to a position in the file. + """ + self.position = position + + def read(self, size=None): + """Read data from the file. + """ + if size is None: + size = self.size - self.position + else: + size = min(size, self.size - self.position) + + buf = b"" + while size > 0: + while True: + data, start, stop, offset = self.map[self.map_index] + if start <= self.position < stop: + break + else: + self.map_index += 1 + if self.map_index == len(self.map): + self.map_index = 0 + length = min(size, stop - self.position) + if data: + self.fileobj.seek(offset + (self.position - start)) + buf += self.fileobj.read(length) + else: + buf += NUL * length + size -= length + self.position += length + return buf +#class _FileInFile + + +class ExFileObject(object): + """File-like object for reading an archive member. + Is returned by TarFile.extractfile(). + """ + blocksize = 1024 + + def __init__(self, tarfile, tarinfo): + self.fileobj = _FileInFile(tarfile.fileobj, + tarinfo.offset_data, + tarinfo.size, + tarinfo.sparse) + self.name = tarinfo.name + self.mode = "r" + self.closed = False + self.size = tarinfo.size + + self.position = 0 + self.buffer = b"" + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def read(self, size=None): + """Read at most size bytes from the file. If size is not + present or None, read all data until EOF is reached. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + buf = b"" + if self.buffer: + if size is None: + buf = self.buffer + self.buffer = b"" + else: + buf = self.buffer[:size] + self.buffer = self.buffer[size:] + + if size is None: + buf += self.fileobj.read() + else: + buf += self.fileobj.read(size - len(buf)) + + self.position += len(buf) + return buf + + # XXX TextIOWrapper uses the read1() method. + read1 = read + + def readline(self, size=-1): + """Read one entire line from the file. If size is present + and non-negative, return a string with at most that + size, which may be an incomplete line. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + while True: + buf = self.fileobj.read(self.blocksize) + self.buffer += buf + if not buf or b"\n" in buf: + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + pos = len(self.buffer) + break + + if size != -1: + pos = min(size, pos) + + buf = self.buffer[:pos] + self.buffer = self.buffer[pos:] + self.position += len(buf) + return buf + + def readlines(self): + """Return a list with all remaining lines. + """ + result = [] + while True: + line = self.readline() + if not line: break + result.append(line) + return result + + def tell(self): + """Return the current file position. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + return self.position + + def seek(self, pos, whence=os.SEEK_SET): + """Seek to a position in the file. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + if whence == os.SEEK_SET: + self.position = min(max(pos, 0), self.size) + elif whence == os.SEEK_CUR: + if pos < 0: + self.position = max(self.position + pos, 0) + else: + self.position = min(self.position + pos, self.size) + elif whence == os.SEEK_END: + self.position = max(min(self.size + pos, self.size), 0) + else: + raise ValueError("Invalid argument") + + self.buffer = b"" + self.fileobj.seek(self.position) + + def close(self): + """Close the file object. + """ + self.closed = True + + def __iter__(self): + """Get an iterator over the file's lines. + """ + while True: + line = self.readline() + if not line: + break + yield line +#class ExFileObject + +#------------------ +# Exported Classes +#------------------ +class TarInfo(object): + """Informational class which holds the details about an + archive member given by a tar header block. + TarInfo objects are returned by TarFile.getmember(), + TarFile.getmembers() and TarFile.gettarinfo() and are + usually created internally. + """ + + __slots__ = ("name", "mode", "uid", "gid", "size", "mtime", + "chksum", "type", "linkname", "uname", "gname", + "devmajor", "devminor", + "offset", "offset_data", "pax_headers", "sparse", + "tarfile", "_sparse_structs", "_link_target") + + def __init__(self, name=""): + """Construct a TarInfo object. name is the optional name + of the member. + """ + self.name = name # member name + self.mode = 0o644 # file permissions + self.uid = 0 # user id + self.gid = 0 # group id + self.size = 0 # file size + self.mtime = 0 # modification time + self.chksum = 0 # header checksum + self.type = REGTYPE # member type + self.linkname = "" # link name + self.uname = "" # user name + self.gname = "" # group name + self.devmajor = 0 # device major number + self.devminor = 0 # device minor number + + self.offset = 0 # the tar header starts here + self.offset_data = 0 # the file's data starts here + + self.sparse = None # sparse member information + self.pax_headers = {} # pax header information + + # In pax headers the "name" and "linkname" field are called + # "path" and "linkpath". + def _getpath(self): + return self.name + def _setpath(self, name): + self.name = name + path = property(_getpath, _setpath) + + def _getlinkpath(self): + return self.linkname + def _setlinkpath(self, linkname): + self.linkname = linkname + linkpath = property(_getlinkpath, _setlinkpath) + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + info = { + "name": self.name, + "mode": self.mode & 0o7777, + "uid": self.uid, + "gid": self.gid, + "size": self.size, + "mtime": self.mtime, + "chksum": self.chksum, + "type": self.type, + "linkname": self.linkname, + "uname": self.uname, + "gname": self.gname, + "devmajor": self.devmajor, + "devminor": self.devminor + } + + if info["type"] == DIRTYPE and not info["name"].endswith("/"): + info["name"] += "/" + + return info + + def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): + """Return a tar header as a string of 512 byte blocks. + """ + info = self.get_info() + + if format == USTAR_FORMAT: + return self.create_ustar_header(info, encoding, errors) + elif format == GNU_FORMAT: + return self.create_gnu_header(info, encoding, errors) + elif format == PAX_FORMAT: + return self.create_pax_header(info, encoding) + else: + raise ValueError("invalid format") + + def create_ustar_header(self, info, encoding, errors): + """Return the object as a ustar header block. + """ + info["magic"] = POSIX_MAGIC + + if len(info["linkname"]) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"]) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"]) + + return self._create_header(info, USTAR_FORMAT, encoding, errors) + + def create_gnu_header(self, info, encoding, errors): + """Return the object as a GNU header block sequence. + """ + info["magic"] = GNU_MAGIC + + buf = b"" + if len(info["linkname"]) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"]) > LENGTH_NAME: + buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) + + return buf + self._create_header(info, GNU_FORMAT, encoding, errors) + + def create_pax_header(self, info, encoding): + """Return the object as a ustar header block. If it cannot be + represented this way, prepend a pax extended header sequence + with supplement information. + """ + info["magic"] = POSIX_MAGIC + pax_headers = self.pax_headers.copy() + + # Test string fields for values that exceed the field length or cannot + # be represented in ASCII encoding. + for name, hname, length in ( + ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), + ("uname", "uname", 32), ("gname", "gname", 32)): + + if hname in pax_headers: + # The pax header has priority. + continue + + # Try to encode the string as ASCII. + try: + info[name].encode("ascii", "strict") + except UnicodeEncodeError: + pax_headers[hname] = info[name] + continue + + if len(info[name]) > length: + pax_headers[hname] = info[name] + + # Test number fields for values that exceed the field limit or values + # that like to be stored as float. + for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): + if name in pax_headers: + # The pax header has priority. Avoid overflow. + info[name] = 0 + continue + + val = info[name] + if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float): + pax_headers[name] = str(val) + info[name] = 0 + + # Create a pax extended header if necessary. + if pax_headers: + buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) + else: + buf = b"" + + return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") + + @classmethod + def create_pax_global_header(cls, pax_headers): + """Return the object as a pax global header block sequence. + """ + return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf8") + + def _posix_split_name(self, name): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + prefix = name[:LENGTH_PREFIX + 1] + while prefix and prefix[-1] != "/": + prefix = prefix[:-1] + + name = name[len(prefix):] + prefix = prefix[:-1] + + if not prefix or len(name) > LENGTH_NAME: + raise ValueError("name is too long") + return prefix, name + + @staticmethod + def _create_header(info, format, encoding, errors): + """Return a header block. info is a dictionary with file + information, format must be one of the *_FORMAT constants. + """ + parts = [ + stn(info.get("name", ""), 100, encoding, errors), + itn(info.get("mode", 0) & 0o7777, 8, format), + itn(info.get("uid", 0), 8, format), + itn(info.get("gid", 0), 8, format), + itn(info.get("size", 0), 12, format), + itn(info.get("mtime", 0), 12, format), + b" ", # checksum field + info.get("type", REGTYPE), + stn(info.get("linkname", ""), 100, encoding, errors), + info.get("magic", POSIX_MAGIC), + stn(info.get("uname", ""), 32, encoding, errors), + stn(info.get("gname", ""), 32, encoding, errors), + itn(info.get("devmajor", 0), 8, format), + itn(info.get("devminor", 0), 8, format), + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + ("%06o\0" % chksum).encode("ascii") + buf[-357:] + return buf + + @staticmethod + def _create_payload(payload): + """Return the string payload filled with zero bytes + up to the next 512 byte border. + """ + blocks, remainder = divmod(len(payload), BLOCKSIZE) + if remainder > 0: + payload += (BLOCKSIZE - remainder) * NUL + return payload + + @classmethod + def _create_gnu_long_header(cls, name, type, encoding, errors): + """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence + for name. + """ + name = name.encode(encoding, errors) + NUL + + info = {} + info["name"] = "././@LongLink" + info["type"] = type + info["size"] = len(name) + info["magic"] = GNU_MAGIC + + # create extended header + name blocks. + return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ + cls._create_payload(name) + + @classmethod + def _create_pax_generic_header(cls, pax_headers, type, encoding): + """Return a POSIX.1-2008 extended or global header sequence + that contains a list of keyword, value pairs. The values + must be strings. + """ + # Check if one of the fields contains surrogate characters and thereby + # forces hdrcharset=BINARY, see _proc_pax() for more information. + binary = False + for keyword, value in pax_headers.items(): + try: + value.encode("utf8", "strict") + except UnicodeEncodeError: + binary = True + break + + records = b"" + if binary: + # Put the hdrcharset field at the beginning of the header. + records += b"21 hdrcharset=BINARY\n" + + for keyword, value in pax_headers.items(): + keyword = keyword.encode("utf8") + if binary: + # Try to restore the original byte representation of `value'. + # Needless to say, that the encoding must match the string. + value = value.encode(encoding, "surrogateescape") + else: + value = value.encode("utf8") + + l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' + n = p = 0 + while True: + n = l + len(str(p)) + if n == p: + break + p = n + records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" + + # We use a hardcoded "././@PaxHeader" name like star does + # instead of the one that POSIX recommends. + info = {} + info["name"] = "././@PaxHeader" + info["type"] = type + info["size"] = len(records) + info["magic"] = POSIX_MAGIC + + # Create pax header + record blocks. + return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ + cls._create_payload(records) + + @classmethod + def frombuf(cls, buf, encoding, errors): + """Construct a TarInfo object from a 512 byte bytes object. + """ + if len(buf) == 0: + raise EmptyHeaderError("empty header") + if len(buf) != BLOCKSIZE: + raise TruncatedHeaderError("truncated header") + if buf.count(NUL) == BLOCKSIZE: + raise EOFHeaderError("end of file header") + + chksum = nti(buf[148:156]) + if chksum not in calc_chksums(buf): + raise InvalidHeaderError("bad checksum") + + obj = cls() + obj.name = nts(buf[0:100], encoding, errors) + obj.mode = nti(buf[100:108]) + obj.uid = nti(buf[108:116]) + obj.gid = nti(buf[116:124]) + obj.size = nti(buf[124:136]) + obj.mtime = nti(buf[136:148]) + obj.chksum = chksum + obj.type = buf[156:157] + obj.linkname = nts(buf[157:257], encoding, errors) + obj.uname = nts(buf[265:297], encoding, errors) + obj.gname = nts(buf[297:329], encoding, errors) + obj.devmajor = nti(buf[329:337]) + obj.devminor = nti(buf[337:345]) + prefix = nts(buf[345:500], encoding, errors) + + # Old V7 tar format represents a directory as a regular + # file with a trailing slash. + if obj.type == AREGTYPE and obj.name.endswith("/"): + obj.type = DIRTYPE + + # The old GNU sparse format occupies some of the unused + # space in the buffer for up to 4 sparse structures. + # Save the them for later processing in _proc_sparse(). + if obj.type == GNUTYPE_SPARSE: + pos = 386 + structs = [] + for i in range(4): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[482]) + origsize = nti(buf[483:495]) + obj._sparse_structs = (structs, isextended, origsize) + + # Remove redundant slashes from directories. + if obj.isdir(): + obj.name = obj.name.rstrip("/") + + # Reconstruct a ustar longname. + if prefix and obj.type not in GNU_TYPES: + obj.name = prefix + "/" + obj.name + return obj + + @classmethod + def fromtarfile(cls, tarfile): + """Return the next TarInfo object from TarFile object + tarfile. + """ + buf = tarfile.fileobj.read(BLOCKSIZE) + obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) + obj.offset = tarfile.fileobj.tell() - BLOCKSIZE + return obj._proc_member(tarfile) + + #-------------------------------------------------------------------------- + # The following are methods that are called depending on the type of a + # member. The entry point is _proc_member() which can be overridden in a + # subclass to add custom _proc_*() methods. A _proc_*() method MUST + # implement the following + # operations: + # 1. Set self.offset_data to the position where the data blocks begin, + # if there is data that follows. + # 2. Set tarfile.offset to the position where the next member's header will + # begin. + # 3. Return self or another valid TarInfo object. + def _proc_member(self, tarfile): + """Choose the right processing method depending on + the type and call it. + """ + if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): + return self._proc_gnulong(tarfile) + elif self.type == GNUTYPE_SPARSE: + return self._proc_sparse(tarfile) + elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): + return self._proc_pax(tarfile) + else: + return self._proc_builtin(tarfile) + + def _proc_builtin(self, tarfile): + """Process a builtin type or an unknown type which + will be treated as a regular file. + """ + self.offset_data = tarfile.fileobj.tell() + offset = self.offset_data + if self.isreg() or self.type not in SUPPORTED_TYPES: + # Skip the following data blocks. + offset += self._block(self.size) + tarfile.offset = offset + + # Patch the TarInfo object with saved global + # header information. + self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) + + return self + + def _proc_gnulong(self, tarfile): + """Process the blocks that hold a GNU longname + or longlink member. + """ + buf = tarfile.fileobj.read(self._block(self.size)) + + # Fetch the next header and process it. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # Patch the TarInfo object from the next header with + # the longname information. + next.offset = self.offset + if self.type == GNUTYPE_LONGNAME: + next.name = nts(buf, tarfile.encoding, tarfile.errors) + elif self.type == GNUTYPE_LONGLINK: + next.linkname = nts(buf, tarfile.encoding, tarfile.errors) + + return next + + def _proc_sparse(self, tarfile): + """Process a GNU sparse header plus extra headers. + """ + # We already collected some sparse structures in frombuf(). + structs, isextended, origsize = self._sparse_structs + del self._sparse_structs + + # Collect sparse structures from extended header blocks. + while isextended: + buf = tarfile.fileobj.read(BLOCKSIZE) + pos = 0 + for i in range(21): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + if offset and numbytes: + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[504]) + self.sparse = structs + + self.offset_data = tarfile.fileobj.tell() + tarfile.offset = self.offset_data + self._block(self.size) + self.size = origsize + return self + + def _proc_pax(self, tarfile): + """Process an extended or global header as described in + POSIX.1-2008. + """ + # Read the header information. + buf = tarfile.fileobj.read(self._block(self.size)) + + # A pax header stores supplemental information for either + # the following file (extended) or all following files + # (global). + if self.type == XGLTYPE: + pax_headers = tarfile.pax_headers + else: + pax_headers = tarfile.pax_headers.copy() + + # Check if the pax header contains a hdrcharset field. This tells us + # the encoding of the path, linkpath, uname and gname fields. Normally, + # these fields are UTF-8 encoded but since POSIX.1-2008 tar + # implementations are allowed to store them as raw binary strings if + # the translation to UTF-8 fails. + match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) + if match is not None: + pax_headers["hdrcharset"] = match.group(1).decode("utf8") + + # For the time being, we don't care about anything other than "BINARY". + # The only other value that is currently allowed by the standard is + # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. + hdrcharset = pax_headers.get("hdrcharset") + if hdrcharset == "BINARY": + encoding = tarfile.encoding + else: + encoding = "utf8" + + # Parse pax header information. A record looks like that: + # "%d %s=%s\n" % (length, keyword, value). length is the size + # of the complete record including the length field itself and + # the newline. keyword and value are both UTF-8 encoded strings. + regex = re.compile(br"(\d+) ([^=]+)=") + pos = 0 + while True: + match = regex.match(buf, pos) + if not match: + break + + length, keyword = match.groups() + length = int(length) + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf8" as the encoding and "strict" + # as the error handler, but we better not take the risk. For + # example, GNU tar <= 1.23 is known to store filenames it cannot + # translate to UTF-8 as raw strings (unfortunately without a + # hdrcharset=BINARY header). + # We first try the strict standard encoding, and if that fails we + # fall back on the user's encoding and error handler. + keyword = self._decode_pax_field(keyword, "utf8", "utf8", + tarfile.errors) + if keyword in PAX_NAME_FIELDS: + value = self._decode_pax_field(value, encoding, tarfile.encoding, + tarfile.errors) + else: + value = self._decode_pax_field(value, "utf8", "utf8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # Process GNU sparse information. + if "GNU.sparse.map" in pax_headers: + # GNU extended sparse format version 0.1. + self._proc_gnusparse_01(next, pax_headers) + + elif "GNU.sparse.size" in pax_headers: + # GNU extended sparse format version 0.0. + self._proc_gnusparse_00(next, pax_headers, buf) + + elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": + # GNU extended sparse format version 1.0. + self._proc_gnusparse_10(next, pax_headers, tarfile) + + if self.type in (XHDTYPE, SOLARIS_XHDTYPE): + # Patch the TarInfo object with the extended header info. + next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) + next.offset = self.offset + + if "size" in pax_headers: + # If the extended header replaces the size field, + # we need to recalculate the offset where the next + # header starts. + offset = next.offset_data + if next.isreg() or next.type not in SUPPORTED_TYPES: + offset += next._block(next.size) + tarfile.offset = offset + + return next + + def _proc_gnusparse_00(self, next, pax_headers, buf): + """Process a GNU tar extended sparse header, version 0.0. + """ + offsets = [] + for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): + offsets.append(int(match.group(1))) + numbytes = [] + for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): + numbytes.append(int(match.group(1))) + next.sparse = list(zip(offsets, numbytes)) + + def _proc_gnusparse_01(self, next, pax_headers): + """Process a GNU tar extended sparse header, version 0.1. + """ + sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _proc_gnusparse_10(self, next, pax_headers, tarfile): + """Process a GNU tar extended sparse header, version 1.0. + """ + fields = None + sparse = [] + buf = tarfile.fileobj.read(BLOCKSIZE) + fields, buf = buf.split(b"\n", 1) + fields = int(fields) + while len(sparse) < fields * 2: + if b"\n" not in buf: + buf += tarfile.fileobj.read(BLOCKSIZE) + number, buf = buf.split(b"\n", 1) + sparse.append(int(number)) + next.offset_data = tarfile.fileobj.tell() + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _apply_pax_info(self, pax_headers, encoding, errors): + """Replace fields with supplemental information from a previous + pax extended or global header. + """ + for keyword, value in pax_headers.items(): + if keyword == "GNU.sparse.name": + setattr(self, "path", value) + elif keyword == "GNU.sparse.size": + setattr(self, "size", int(value)) + elif keyword == "GNU.sparse.realsize": + setattr(self, "size", int(value)) + elif keyword in PAX_FIELDS: + if keyword in PAX_NUMBER_FIELDS: + try: + value = PAX_NUMBER_FIELDS[keyword](value) + except ValueError: + value = 0 + if keyword == "path": + value = value.rstrip("/") + setattr(self, keyword, value) + + self.pax_headers = pax_headers.copy() + + def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): + """Decode a single field from a pax record. + """ + try: + return value.decode(encoding, "strict") + except UnicodeDecodeError: + return value.decode(fallback_encoding, fallback_errors) + + def _block(self, count): + """Round up a byte count by BLOCKSIZE and return it, + e.g. _block(834) => 1024. + """ + blocks, remainder = divmod(count, BLOCKSIZE) + if remainder: + blocks += 1 + return blocks * BLOCKSIZE + + def isreg(self): + return self.type in REGULAR_TYPES + def isfile(self): + return self.isreg() + def isdir(self): + return self.type == DIRTYPE + def issym(self): + return self.type == SYMTYPE + def islnk(self): + return self.type == LNKTYPE + def ischr(self): + return self.type == CHRTYPE + def isblk(self): + return self.type == BLKTYPE + def isfifo(self): + return self.type == FIFOTYPE + def issparse(self): + return self.sparse is not None + def isdev(self): + return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) +# class TarInfo + +class TarFile(object): + """The TarFile Class provides an interface to tar archives. + """ + + debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) + + dereference = False # If true, add content of linked file to the + # tar file, else the link. + + ignore_zeros = False # If true, skips empty or invalid blocks and + # continues processing. + + errorlevel = 1 # If 0, fatal errors only appear in debug + # messages (if debug >= 0). If > 0, errors + # are passed to the caller as exceptions. + + format = DEFAULT_FORMAT # The format to use when creating an archive. + + encoding = ENCODING # Encoding for 8-bit character strings. + + errors = None # Error handler for unicode conversion. + + tarinfo = TarInfo # The default TarInfo class to use. + + fileobject = ExFileObject # The default ExFileObject class to use. + + def __init__(self, name=None, mode="r", fileobj=None, format=None, + tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, + errors="surrogateescape", pax_headers=None, debug=None, errorlevel=None): + """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to + read from an existing archive, 'a' to append data to an existing + file or 'w' to create a new file overwriting an existing one. `mode' + defaults to 'r'. + If `fileobj' is given, it is used for reading or writing data. If it + can be determined, `mode' is overridden by `fileobj's mode. + `fileobj' is not closed, when TarFile is closed. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + self.mode = mode + self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] + + if not fileobj: + if self.mode == "a" and not os.path.exists(name): + # Create nonexistent files in append mode. + self.mode = "w" + self._mode = "wb" + fileobj = bltn_open(name, self._mode) + self._extfileobj = False + else: + if name is None and hasattr(fileobj, "name"): + name = fileobj.name + if hasattr(fileobj, "mode"): + self._mode = fileobj.mode + self._extfileobj = True + self.name = os.path.abspath(name) if name else None + self.fileobj = fileobj + + # Init attributes. + if format is not None: + self.format = format + if tarinfo is not None: + self.tarinfo = tarinfo + if dereference is not None: + self.dereference = dereference + if ignore_zeros is not None: + self.ignore_zeros = ignore_zeros + if encoding is not None: + self.encoding = encoding + self.errors = errors + + if pax_headers is not None and self.format == PAX_FORMAT: + self.pax_headers = pax_headers + else: + self.pax_headers = {} + + if debug is not None: + self.debug = debug + if errorlevel is not None: + self.errorlevel = errorlevel + + # Init datastructures. + self.closed = False + self.members = [] # list of members as TarInfo objects + self._loaded = False # flag if all members have been read + self.offset = self.fileobj.tell() + # current position in the archive file + self.inodes = {} # dictionary caching the inodes of + # archive members already added + + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + while True: + self.fileobj.seek(self.offset) + try: + tarinfo = self.tarinfo.fromtarfile(self) + self.members.append(tarinfo) + except EOFHeaderError: + self.fileobj.seek(self.offset) + break + except HeaderError as e: + raise ReadError(str(e)) + + if self.mode in "aw": + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + #-------------------------------------------------------------------------- + # Below are the classmethods which act as alternate constructors to the + # TarFile class. The open() method is the only one that is needed for + # public use; it is the "super"-constructor and is able to select an + # adequate "sub"-constructor for a particular compression using the mapping + # from OPEN_METH. + # + # This concept allows one to subclass TarFile without losing the comfort of + # the super-constructor. A sub-constructor is registered and made available + # by adding it to the mapping in OPEN_METH. + + @classmethod + def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): + """Open a tar archive for reading, writing or appending. Return + an appropriate TarFile class. + + mode: + 'r' or 'r:*' open for reading with transparent compression + 'r:' open for reading exclusively uncompressed + 'r:gz' open for reading with gzip compression + 'r:bz2' open for reading with bzip2 compression + 'a' or 'a:' open for appending, creating the file if necessary + 'w' or 'w:' open for writing without compression + 'w:gz' open for writing with gzip compression + 'w:bz2' open for writing with bzip2 compression + + 'r|*' open a stream of tar blocks with transparent compression + 'r|' open an uncompressed stream of tar blocks for reading + 'r|gz' open a gzip compressed stream of tar blocks + 'r|bz2' open a bzip2 compressed stream of tar blocks + 'w|' open an uncompressed stream for writing + 'w|gz' open a gzip compressed stream for writing + 'w|bz2' open a bzip2 compressed stream for writing + """ + + if not name and not fileobj: + raise ValueError("nothing to open") + + if mode in ("r", "r:*"): + # Find out which *open() is appropriate for opening the file. + for comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + if fileobj is not None: + saved_pos = fileobj.tell() + try: + return func(name, "r", fileobj, **kwargs) + except (ReadError, CompressionError) as e: + if fileobj is not None: + fileobj.seek(saved_pos) + continue + raise ReadError("file could not be opened successfully") + + elif ":" in mode: + filemode, comptype = mode.split(":", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + # Select the *open() function according to + # given compression. + if comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + else: + raise CompressionError("unknown compression type %r" % comptype) + return func(name, filemode, fileobj, **kwargs) + + elif "|" in mode: + filemode, comptype = mode.split("|", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + if filemode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + stream = _Stream(name, filemode, comptype, fileobj, bufsize) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in "aw": + return cls.taropen(name, mode, fileobj, **kwargs) + + raise ValueError("undiscernible mode") + + @classmethod + def taropen(cls, name, mode="r", fileobj=None, **kwargs): + """Open uncompressed tar archive name for reading or writing. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + return cls(name, mode, fileobj, **kwargs) + + @classmethod + def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open gzip compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + try: + import gzip + gzip.GzipFile + except (ImportError, AttributeError): + raise CompressionError("gzip module is not available") + + extfileobj = fileobj is not None + try: + fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) + t = cls.taropen(name, mode, fileobj, **kwargs) + except IOError: + if not extfileobj and fileobj is not None: + fileobj.close() + if fileobj is None: + raise + raise ReadError("not a gzip file") + except: + if not extfileobj and fileobj is not None: + fileobj.close() + raise + t._extfileobj = extfileobj + return t + + @classmethod + def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open bzip2 compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'.") + + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + + if fileobj is not None: + fileobj = _BZ2Proxy(fileobj, mode) + else: + fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (IOError, EOFError): + fileobj.close() + raise ReadError("not a bzip2 file") + t._extfileobj = False + return t + + # All *open() methods are registered here. + OPEN_METH = { + "tar": "taropen", # uncompressed tar + "gz": "gzopen", # gzip compressed tar + "bz2": "bz2open" # bzip2 compressed tar + } + + #-------------------------------------------------------------------------- + # The public methods which TarFile provides: + + def close(self): + """Close the TarFile. In write-mode, two finishing zero blocks are + appended to the archive. + """ + if self.closed: + return + + if self.mode in "aw": + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + + if not self._extfileobj: + self.fileobj.close() + self.closed = True + + def getmember(self, name): + """Return a TarInfo object for member `name'. If `name' can not be + found in the archive, KeyError is raised. If a member occurs more + than once in the archive, its last occurrence is assumed to be the + most up-to-date version. + """ + tarinfo = self._getmember(name) + if tarinfo is None: + raise KeyError("filename %r not found" % name) + return tarinfo + + def getmembers(self): + """Return the members of the archive as a list of TarInfo objects. The + list has the same order as the members in the archive. + """ + self._check() + if not self._loaded: # if we want to obtain a list of + self._load() # all members, we first have to + # scan the whole archive. + return self.members + + def getnames(self): + """Return the members of the archive as a list of their names. It has + the same order as the list returned by getmembers(). + """ + return [tarinfo.name for tarinfo in self.getmembers()] + + def gettarinfo(self, name=None, arcname=None, fileobj=None): + """Create a TarInfo object for either the file `name' or the file + object `fileobj' (using os.fstat on its file descriptor). You can + modify some of the TarInfo's attributes before you add it using + addfile(). If given, `arcname' specifies an alternative name for the + file in the archive. + """ + self._check("aw") + + # When fileobj is given, replace name by + # fileobj's real name. + if fileobj is not None: + name = fileobj.name + + # Building the name of the member in the archive. + # Backward slashes are converted to forward slashes, + # Absolute paths are turned to relative paths. + if arcname is None: + arcname = name + drv, arcname = os.path.splitdrive(arcname) + arcname = arcname.replace(os.sep, "/") + arcname = arcname.lstrip("/") + + # Now, fill the TarInfo object with + # information specific for the file. + tarinfo = self.tarinfo() + tarinfo.tarfile = self + + # Use os.stat or os.lstat, depending on platform + # and if symlinks shall be resolved. + if fileobj is None: + if hasattr(os, "lstat") and not self.dereference: + statres = os.lstat(name) + else: + statres = os.stat(name) + else: + statres = os.fstat(fileobj.fileno()) + linkname = "" + + stmd = statres.st_mode + if stat.S_ISREG(stmd): + inode = (statres.st_ino, statres.st_dev) + if not self.dereference and statres.st_nlink > 1 and \ + inode in self.inodes and arcname != self.inodes[inode]: + # Is it a hardlink to an already + # archived file? + type = LNKTYPE + linkname = self.inodes[inode] + else: + # The inode is added only if its valid. + # For win32 it is always 0. + type = REGTYPE + if inode[0]: + self.inodes[inode] = arcname + elif stat.S_ISDIR(stmd): + type = DIRTYPE + elif stat.S_ISFIFO(stmd): + type = FIFOTYPE + elif stat.S_ISLNK(stmd): + type = SYMTYPE + linkname = os.readlink(name) + elif stat.S_ISCHR(stmd): + type = CHRTYPE + elif stat.S_ISBLK(stmd): + type = BLKTYPE + else: + return None + + # Fill the TarInfo object with all + # information we can get. + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if type == REGTYPE: + tarinfo.size = statres.st_size + else: + tarinfo.size = 0 + tarinfo.mtime = statres.st_mtime + tarinfo.type = type + tarinfo.linkname = linkname + if pwd: + try: + tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] + except KeyError: + pass + if grp: + try: + tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] + except KeyError: + pass + + if type in (CHRTYPE, BLKTYPE): + if hasattr(os, "major") and hasattr(os, "minor"): + tarinfo.devmajor = os.major(statres.st_rdev) + tarinfo.devminor = os.minor(statres.st_rdev) + return tarinfo + + def list(self, verbose=True): + """Print a table of contents to sys.stdout. If `verbose' is False, only + the names of the members are printed. If it is True, an `ls -l'-like + output is produced. + """ + self._check() + + for tarinfo in self: + if verbose: + print(filemode(tarinfo.mode), end=' ') + print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid), end=' ') + if tarinfo.ischr() or tarinfo.isblk(): + print("%10s" % ("%d,%d" \ + % (tarinfo.devmajor, tarinfo.devminor)), end=' ') + else: + print("%10d" % tarinfo.size, end=' ') + print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6], end=' ') + + print(tarinfo.name + ("/" if tarinfo.isdir() else ""), end=' ') + + if verbose: + if tarinfo.issym(): + print("->", tarinfo.linkname, end=' ') + if tarinfo.islnk(): + print("link to", tarinfo.linkname, end=' ') + print() + + def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): + """Add the file `name' to the archive. `name' may be any type of file + (directory, fifo, symbolic link, etc.). If given, `arcname' + specifies an alternative name for the file in the archive. + Directories are added recursively by default. This can be avoided by + setting `recursive' to False. `exclude' is a function that should + return True for each filename to be excluded. `filter' is a function + that expects a TarInfo object argument and returns the changed + TarInfo object, if it returns None the TarInfo object will be + excluded from the archive. + """ + self._check("aw") + + if arcname is None: + arcname = name + + # Exclude pathnames. + if exclude is not None: + import warnings + warnings.warn("use the filter argument instead", + DeprecationWarning, 2) + if exclude(name): + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Skip if somebody tries to archive the archive... + if self.name is not None and os.path.abspath(name) == self.name: + self._dbg(2, "tarfile: Skipped %r" % name) + return + + self._dbg(1, name) + + # Create a TarInfo object from the file. + tarinfo = self.gettarinfo(name, arcname) + + if tarinfo is None: + self._dbg(1, "tarfile: Unsupported type %r" % name) + return + + # Change or exclude the TarInfo object. + if filter is not None: + tarinfo = filter(tarinfo) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Append the tar header and data to the archive. + if tarinfo.isreg(): + f = bltn_open(name, "rb") + self.addfile(tarinfo, f) + f.close() + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in os.listdir(name): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, exclude, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is + given, tarinfo.size bytes are read from it and added to the archive. + You can create TarInfo objects using gettarinfo(). + On Windows platforms, `fileobj' should always be opened with mode + 'rb' to avoid irritation about the file size. + """ + self._check("aw") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size) + blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) + if remainder > 0: + self.fileobj.write(NUL * (BLOCKSIZE - remainder)) + blocks += 1 + self.offset += blocks * BLOCKSIZE + + self.members.append(tarinfo) + + def extractall(self, path=".", members=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). + """ + directories = [] + + if members is None: + members = self + + for tarinfo in members: + if tarinfo.isdir(): + # Extract directories with a safe mode. + directories.append(tarinfo) + tarinfo = copy.copy(tarinfo) + tarinfo.mode = 0o700 + # Do not set_attrs directories, as we will do that further down + self.extract(tarinfo, path, set_attrs=not tarinfo.isdir()) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name) + directories.reverse() + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extract(self, member, path="", set_attrs=True): + """Extract a member from the archive to the current working directory, + using its full name. Its file information is extracted as accurately + as possible. `member' may be a filename or a TarInfo object. You can + specify a different directory using `path'. File attributes (owner, + mtime, mode) are set unless `set_attrs' is False. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs) + except EnvironmentError as e: + if self.errorlevel > 0: + raise + else: + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extractfile(self, member): + """Extract a member from the archive as a file object. `member' may be + a filename or a TarInfo object. If `member' is a regular file, a + file-like object is returned. If `member' is a link, a file-like + object is constructed from the link's target. If `member' is none of + the above, None is returned. + The file-like object is read-only and provides the following + methods: read(), readline(), readlines(), seek() and tell() + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg(): + return self.fileobject(self, tarinfo) + + elif tarinfo.type not in SUPPORTED_TYPES: + # If a member's type is unknown, it is treated as a + # regular file. + return self.fileobject(self, tarinfo) + + elif tarinfo.islnk() or tarinfo.issym(): + if isinstance(self.fileobj, _Stream): + # A small but ugly workaround for the case that someone tries + # to extract a (sym)link as a file-object from a non-seekable + # stream of tar blocks. + raise StreamError("cannot extract (sym)link as file object") + else: + # A (sym)link's file object is its target's file object. + return self.extractfile(self._find_link_target(tarinfo)) + else: + # If there's no data associated with the member (directory, chrdev, + # blkdev, etc.), return None instead of a file object. + return None + + def _extract_member(self, tarinfo, targetpath, set_attrs=True): + """Extract the TarInfo object tarinfo to a physical + file called targetpath. + """ + # Fetch the TarInfo object for the given name + # and build the destination pathname, replacing + # forward slashes to platform specific separators. + targetpath = targetpath.rstrip("/") + targetpath = targetpath.replace("/", os.sep) + + # Create all upper directories. + upperdirs = os.path.dirname(targetpath) + if upperdirs and not os.path.exists(upperdirs): + # Create directories that are not part of the archive with + # default permissions. + os.makedirs(upperdirs) + + if tarinfo.islnk() or tarinfo.issym(): + self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) + else: + self._dbg(1, tarinfo.name) + + if tarinfo.isreg(): + self.makefile(tarinfo, targetpath) + elif tarinfo.isdir(): + self.makedir(tarinfo, targetpath) + elif tarinfo.isfifo(): + self.makefifo(tarinfo, targetpath) + elif tarinfo.ischr() or tarinfo.isblk(): + self.makedev(tarinfo, targetpath) + elif tarinfo.islnk() or tarinfo.issym(): + self.makelink(tarinfo, targetpath) + elif tarinfo.type not in SUPPORTED_TYPES: + self.makeunknown(tarinfo, targetpath) + else: + self.makefile(tarinfo, targetpath) + + if set_attrs: + self.chown(tarinfo, targetpath) + if not tarinfo.issym(): + self.chmod(tarinfo, targetpath) + self.utime(tarinfo, targetpath) + + #-------------------------------------------------------------------------- + # Below are the different file methods. They are called via + # _extract_member() when extract() is called. They can be replaced in a + # subclass to implement other functionality. + + def makedir(self, tarinfo, targetpath): + """Make a directory called targetpath. + """ + try: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except EnvironmentError as e: + if e.errno != errno.EEXIST: + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + target = bltn_open(targetpath, "wb") + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size) + else: + copyfileobj(source, target, tarinfo.size) + target.seek(tarinfo.size) + target.truncate() + target.close() + + def makeunknown(self, tarinfo, targetpath): + """Make a file from a TarInfo object with an unknown type + at targetpath. + """ + self.makefile(tarinfo, targetpath) + self._dbg(1, "tarfile: Unknown file type %r, " \ + "extracted as regular file." % tarinfo.type) + + def makefifo(self, tarinfo, targetpath): + """Make a fifo called targetpath. + """ + if hasattr(os, "mkfifo"): + os.mkfifo(targetpath) + else: + raise ExtractError("fifo not supported by system") + + def makedev(self, tarinfo, targetpath): + """Make a character or block device called targetpath. + """ + if not hasattr(os, "mknod") or not hasattr(os, "makedev"): + raise ExtractError("special devices not supported by system") + + mode = tarinfo.mode + if tarinfo.isblk(): + mode |= stat.S_IFBLK + else: + mode |= stat.S_IFCHR + + os.mknod(targetpath, mode, + os.makedev(tarinfo.devmajor, tarinfo.devminor)) + + def makelink(self, tarinfo, targetpath): + """Make a (symbolic) link called targetpath. If it cannot be created + (platform limitation), we try to make a copy of the referenced file + instead of a link. + """ + try: + # For systems that support symbolic and hard links. + if tarinfo.issym(): + os.symlink(tarinfo.linkname, targetpath) + else: + # See extract(). + if os.path.exists(tarinfo._link_target): + os.link(tarinfo._link_target, targetpath) + else: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except symlink_exception: + if tarinfo.issym(): + linkpath = os.path.join(os.path.dirname(tarinfo.name), + tarinfo.linkname) + else: + linkpath = tarinfo.linkname + else: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") + + def chown(self, tarinfo, targetpath): + """Set owner of targetpath according to tarinfo. + """ + if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + try: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + g = tarinfo.gid + try: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + u = tarinfo.uid + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + if sys.platform != "os2emx": + os.chown(targetpath, u, g) + except EnvironmentError as e: + raise ExtractError("could not change owner") + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if hasattr(os, 'chmod'): + try: + os.chmod(targetpath, tarinfo.mode) + except EnvironmentError as e: + raise ExtractError("could not change mode") + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (tarinfo.mtime, tarinfo.mtime)) + except EnvironmentError as e: + raise ExtractError("could not change modification time") + + #-------------------------------------------------------------------------- + def next(self): + """Return the next member of the archive as a TarInfo object, when + TarFile is opened for reading. Return None if there is no more + available. + """ + self._check("ra") + if self.firstmember is not None: + m = self.firstmember + self.firstmember = None + return m + + # Read the next block. + self.fileobj.seek(self.offset) + tarinfo = None + while True: + try: + tarinfo = self.tarinfo.fromtarfile(self) + except EOFHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + except InvalidHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + elif self.offset == 0: + raise ReadError(str(e)) + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) + except SubsequentHeaderError as e: + raise ReadError(str(e)) + break + + if tarinfo is not None: + self.members.append(tarinfo) + else: + self._loaded = True + + return tarinfo + + #-------------------------------------------------------------------------- + # Little helper methods: + + def _getmember(self, name, tarinfo=None, normalize=False): + """Find an archive member by name from bottom to top. + If tarinfo is given, it is used as the starting point. + """ + # Ensure that all members have been loaded. + members = self.getmembers() + + # Limit the member search list up to tarinfo. + if tarinfo is not None: + members = members[:members.index(tarinfo)] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + def _load(self): + """Read through the entire archive file and look for readable + members. + """ + while True: + tarinfo = self.next() + if tarinfo is None: + break + self._loaded = True + + def _check(self, mode=None): + """Check if TarFile is still open, and if the operation's mode + corresponds to TarFile's mode. + """ + if self.closed: + raise IOError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise IOError("bad operation for mode %r" % self.mode) + + def _find_link_target(self, tarinfo): + """Find the target member of a symlink or hardlink member in the + archive. + """ + if tarinfo.issym(): + # Always search the entire archive. + linkname = os.path.dirname(tarinfo.name) + "/" + tarinfo.linkname + limit = None + else: + # Search the archive before the link, because a hard link is + # just a reference to an already archived file. + linkname = tarinfo.linkname + limit = tarinfo + + member = self._getmember(linkname, tarinfo=limit, normalize=True) + if member is None: + raise KeyError("linkname %r not found" % linkname) + return member + + def __iter__(self): + """Provide an iterator object. + """ + if self._loaded: + return iter(self.members) + else: + return TarIter(self) + + def _dbg(self, level, msg): + """Write debugging output to sys.stderr. + """ + if level <= self.debug: + print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True +# class TarFile + +class TarIter(object): + """Iterator Class. + + for tarinfo in TarFile(...): + suite... + """ + + def __init__(self, tarfile): + """Construct a TarIter object. + """ + self.tarfile = tarfile + self.index = 0 + def __iter__(self): + """Return iterator object. + """ + return self + + def __next__(self): + """Return the next item using TarFile's next() method. + When all members have been read, set TarFile as _loaded. + """ + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will cause TarIter to stop prematurely. + if not self.tarfile._loaded: + tarinfo = self.tarfile.next() + if not tarinfo: + self.tarfile._loaded = True + raise StopIteration + else: + try: + tarinfo = self.tarfile.members[self.index] + except IndexError: + raise StopIteration + self.index += 1 + return tarinfo + + next = __next__ # for Python 2.x + +#-------------------- +# exported functions +#-------------------- +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + """ + try: + t = open(name) + t.close() + return True + except TarError: + return False + +bltn_open = open +open = TarFile.open diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/compat.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/compat.py new file mode 100644 index 0000000..5ed8643 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/compat.py @@ -0,0 +1,1102 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2014 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import absolute_import + +import os +import re +import sys + +if sys.version_info[0] < 3: # pragma: no cover + from StringIO import StringIO + string_types = basestring, + text_type = unicode + from types import FileType as file_type + import __builtin__ as builtins + import ConfigParser as configparser + from ._backport import shutil + from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit + from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, + pathname2url, ContentTooShortError, splittype) + + def quote(s): + if isinstance(s, unicode): + s = s.encode('utf-8') + return _quote(s) + + import urllib2 + from urllib2 import (Request, urlopen, URLError, HTTPError, + HTTPBasicAuthHandler, HTTPPasswordMgr, + HTTPSHandler, HTTPHandler, HTTPRedirectHandler, + build_opener) + import httplib + import xmlrpclib + import Queue as queue + from HTMLParser import HTMLParser + import htmlentitydefs + raw_input = raw_input + from itertools import ifilter as filter + from itertools import ifilterfalse as filterfalse + + _userprog = None + def splituser(host): + """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" + global _userprog + if _userprog is None: + import re + _userprog = re.compile('^(.*)@(.*)$') + + match = _userprog.match(host) + if match: return match.group(1, 2) + return None, host + +else: # pragma: no cover + from io import StringIO + string_types = str, + text_type = str + from io import TextIOWrapper as file_type + import builtins + import configparser + import shutil + from urllib.parse import (urlparse, urlunparse, urljoin, splituser, quote, + unquote, urlsplit, urlunsplit, splittype) + from urllib.request import (urlopen, urlretrieve, Request, url2pathname, + pathname2url, + HTTPBasicAuthHandler, HTTPPasswordMgr, + HTTPSHandler, HTTPHandler, HTTPRedirectHandler, + build_opener) + from urllib.error import HTTPError, URLError, ContentTooShortError + import http.client as httplib + import urllib.request as urllib2 + import xmlrpc.client as xmlrpclib + import queue + from html.parser import HTMLParser + import html.entities as htmlentitydefs + raw_input = input + from itertools import filterfalse + filter = filter + +try: + from ssl import match_hostname, CertificateError +except ImportError: # pragma: no cover + class CertificateError(ValueError): + pass + + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + parts = dn.split('.') + leftmost, remainder = parts[0], parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survery of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +try: + from types import SimpleNamespace as Container +except ImportError: # pragma: no cover + class Container(object): + """ + A generic container for when multiple values need to be returned + """ + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + +try: + from shutil import which +except ImportError: # pragma: no cover + # Implementation from Python 3.3 + def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if not os.curdir in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if not normdir in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None + + +# ZipFile is a context manager in 2.7, but not in 2.6 + +from zipfile import ZipFile as BaseZipFile + +if hasattr(BaseZipFile, '__enter__'): # pragma: no cover + ZipFile = BaseZipFile +else: + from zipfile import ZipExtFile as BaseZipExtFile + + class ZipExtFile(BaseZipExtFile): + def __init__(self, base): + self.__dict__.update(base.__dict__) + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + class ZipFile(BaseZipFile): + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + def open(self, *args, **kwargs): + base = BaseZipFile.open(self, *args, **kwargs) + return ZipExtFile(base) + +try: + from platform import python_implementation +except ImportError: # pragma: no cover + def python_implementation(): + """Return a string identifying the Python implementation.""" + if 'PyPy' in sys.version: + return 'PyPy' + if os.name == 'java': + return 'Jython' + if sys.version.startswith('IronPython'): + return 'IronPython' + return 'CPython' + +try: + import sysconfig +except ImportError: # pragma: no cover + from ._backport import sysconfig + +try: + callable = callable +except NameError: # pragma: no cover + from collections import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode + fsdecode = os.fsdecode +except AttributeError: # pragma: no cover + _fsencoding = sys.getfilesystemencoding() + if _fsencoding == 'mbcs': + _fserrors = 'strict' + else: + _fserrors = 'surrogateescape' + + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, text_type): + return filename.encode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + + def fsdecode(filename): + if isinstance(filename, text_type): + return filename + elif isinstance(filename, bytes): + return filename.decode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + +try: + from tokenize import detect_encoding +except ImportError: # pragma: no cover + from codecs import BOM_UTF8, lookup + import re + + cookie_re = re.compile("coding[:=]\s*([-\w.]+)") + + def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + + def detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that should + be used to decode a Python source file. It requires one argment, readline, + in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are present, + but disagree, a SyntaxError will be raised. If the encoding cookie is an + invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be returned. + """ + try: + filename = readline.__self__.name + except AttributeError: + filename = None + bom_found = False + encoding = None + default = 'utf-8' + def read_or_stop(): + try: + return readline() + except StopIteration: + return b'' + + def find_cookie(line): + try: + # Decode as UTF-8. Either the line is an encoding declaration, + # in which case it should be pure ASCII, or it must be UTF-8 + # per default encoding. + line_string = line.decode('utf-8') + except UnicodeDecodeError: + msg = "invalid or missing encoding declaration" + if filename is not None: + msg = '{} for {!r}'.format(msg, filename) + raise SyntaxError(msg) + + matches = cookie_re.findall(line_string) + if not matches: + return None + encoding = _get_normal_name(matches[0]) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + if filename is None: + msg = "unknown encoding: " + encoding + else: + msg = "unknown encoding for {!r}: {}".format(filename, + encoding) + raise SyntaxError(msg) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + if filename is None: + msg = 'encoding problem: utf-8' + else: + msg = 'encoding problem for {!r}: utf-8'.format(filename) + raise SyntaxError(msg) + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + +# For converting & <-> & etc. +try: + from html import escape +except ImportError: + from cgi import escape +if sys.version_info[:2] < (3, 4): + unescape = HTMLParser().unescape +else: + from html import unescape + +try: + from collections import ChainMap +except ImportError: # pragma: no cover + from collections import MutableMapping + + try: + from reprlib import recursive_repr as _recursive_repr + except ImportError: + def _recursive_repr(fillvalue='...'): + ''' + Decorator to make a repr function return fillvalue for a recursive + call + ''' + + def decorating_function(user_function): + repr_running = set() + + def wrapper(self): + key = id(self), get_ident() + if key in repr_running: + return fillvalue + repr_running.add(key) + try: + result = user_function(self) + finally: + repr_running.discard(key) + return result + + # Can't use functools.wraps() here because of bootstrap issues + wrapper.__module__ = getattr(user_function, '__module__') + wrapper.__doc__ = getattr(user_function, '__doc__') + wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) + return wrapper + + return decorating_function + + class ChainMap(MutableMapping): + ''' A ChainMap groups multiple dicts (or other mappings) together + to create a single, updateable view. + + The underlying mappings are stored in a list. That list is public and can + accessed or updated using the *maps* attribute. There is no other state. + + Lookups search the underlying mappings successively until a key is found. + In contrast, writes, updates, and deletions only operate on the first + mapping. + + ''' + + def __init__(self, *maps): + '''Initialize a ChainMap by setting *maps* to the given mappings. + If no mappings are provided, a single empty dictionary is used. + + ''' + self.maps = list(maps) or [{}] # always at least one map + + def __missing__(self, key): + raise KeyError(key) + + def __getitem__(self, key): + for mapping in self.maps: + try: + return mapping[key] # can't use 'key in mapping' with defaultdict + except KeyError: + pass + return self.__missing__(key) # support subclasses that define __missing__ + + def get(self, key, default=None): + return self[key] if key in self else default + + def __len__(self): + return len(set().union(*self.maps)) # reuses stored hash values if possible + + def __iter__(self): + return iter(set().union(*self.maps)) + + def __contains__(self, key): + return any(key in m for m in self.maps) + + def __bool__(self): + return any(self.maps) + + @_recursive_repr() + def __repr__(self): + return '{0.__class__.__name__}({1})'.format( + self, ', '.join(map(repr, self.maps))) + + @classmethod + def fromkeys(cls, iterable, *args): + 'Create a ChainMap with a single dict created from the iterable.' + return cls(dict.fromkeys(iterable, *args)) + + def copy(self): + 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' + return self.__class__(self.maps[0].copy(), *self.maps[1:]) + + __copy__ = copy + + def new_child(self): # like Django's Context.push() + 'New ChainMap with a new dict followed by all previous maps.' + return self.__class__({}, *self.maps) + + @property + def parents(self): # like Django's Context.pop() + 'New ChainMap from maps[1:].' + return self.__class__(*self.maps[1:]) + + def __setitem__(self, key, value): + self.maps[0][key] = value + + def __delitem__(self, key): + try: + del self.maps[0][key] + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def popitem(self): + 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' + try: + return self.maps[0].popitem() + except KeyError: + raise KeyError('No keys found in the first mapping.') + + def pop(self, key, *args): + 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' + try: + return self.maps[0].pop(key, *args) + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def clear(self): + 'Clear maps[0], leaving maps[1:] intact.' + self.maps[0].clear() + +try: + from imp import cache_from_source +except ImportError: # pragma: no cover + def cache_from_source(path, debug_override=None): + assert path.endswith('.py') + if debug_override is None: + debug_override = __debug__ + if debug_override: + suffix = 'c' + else: + suffix = 'o' + return path + suffix + +try: + from collections import OrderedDict +except ImportError: # pragma: no cover +## {{{ http://code.activestate.com/recipes/576693/ (r9) +# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. +# Passes Python2.7's test suite and incorporates all the latest updates. + try: + from thread import get_ident as _get_ident + except ImportError: + from dummy_thread import get_ident as _get_ident + + try: + from _abcoll import KeysView, ValuesView, ItemsView + except ImportError: + pass + + + class OrderedDict(dict): + 'Dictionary that remembers insertion order' + # An inherited dict maps keys to values. + # The inherited dict provides __getitem__, __len__, __contains__, and get. + # The remaining methods are order-aware. + # Big-O running times for all methods are the same as for regular dictionaries. + + # The internal self.__map dictionary maps keys to links in a doubly linked list. + # The circular doubly linked list starts and ends with a sentinel element. + # The sentinel element never gets deleted (this simplifies the algorithm). + # Each link is stored as a list of length three: [PREV, NEXT, KEY]. + + def __init__(self, *args, **kwds): + '''Initialize an ordered dictionary. Signature is the same as for + regular dictionaries, but keyword arguments are not recommended + because their insertion order is arbitrary. + + ''' + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + try: + self.__root + except AttributeError: + self.__root = root = [] # sentinel node + root[:] = [root, root, None] + self.__map = {} + self.__update(*args, **kwds) + + def __setitem__(self, key, value, dict_setitem=dict.__setitem__): + 'od.__setitem__(i, y) <==> od[i]=y' + # Setting a new item creates a new link which goes at the end of the linked + # list, and the inherited dictionary is updated with the new key/value pair. + if key not in self: + root = self.__root + last = root[0] + last[1] = root[0] = self.__map[key] = [last, root, key] + dict_setitem(self, key, value) + + def __delitem__(self, key, dict_delitem=dict.__delitem__): + 'od.__delitem__(y) <==> del od[y]' + # Deleting an existing item uses self.__map to find the link which is + # then removed by updating the links in the predecessor and successor nodes. + dict_delitem(self, key) + link_prev, link_next, key = self.__map.pop(key) + link_prev[1] = link_next + link_next[0] = link_prev + + def __iter__(self): + 'od.__iter__() <==> iter(od)' + root = self.__root + curr = root[1] + while curr is not root: + yield curr[2] + curr = curr[1] + + def __reversed__(self): + 'od.__reversed__() <==> reversed(od)' + root = self.__root + curr = root[0] + while curr is not root: + yield curr[2] + curr = curr[0] + + def clear(self): + 'od.clear() -> None. Remove all items from od.' + try: + for node in self.__map.itervalues(): + del node[:] + root = self.__root + root[:] = [root, root, None] + self.__map.clear() + except AttributeError: + pass + dict.clear(self) + + def popitem(self, last=True): + '''od.popitem() -> (k, v), return and remove a (key, value) pair. + Pairs are returned in LIFO order if last is true or FIFO order if false. + + ''' + if not self: + raise KeyError('dictionary is empty') + root = self.__root + if last: + link = root[0] + link_prev = link[0] + link_prev[1] = root + root[0] = link_prev + else: + link = root[1] + link_next = link[1] + root[1] = link_next + link_next[0] = root + key = link[2] + del self.__map[key] + value = dict.pop(self, key) + return key, value + + # -- the following methods do not depend on the internal structure -- + + def keys(self): + 'od.keys() -> list of keys in od' + return list(self) + + def values(self): + 'od.values() -> list of values in od' + return [self[key] for key in self] + + def items(self): + 'od.items() -> list of (key, value) pairs in od' + return [(key, self[key]) for key in self] + + def iterkeys(self): + 'od.iterkeys() -> an iterator over the keys in od' + return iter(self) + + def itervalues(self): + 'od.itervalues -> an iterator over the values in od' + for k in self: + yield self[k] + + def iteritems(self): + 'od.iteritems -> an iterator over the (key, value) items in od' + for k in self: + yield (k, self[k]) + + def update(*args, **kwds): + '''od.update(E, **F) -> None. Update od from dict/iterable E and F. + + If E is a dict instance, does: for k in E: od[k] = E[k] + If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] + Or if E is an iterable of items, does: for k, v in E: od[k] = v + In either case, this is followed by: for k, v in F.items(): od[k] = v + + ''' + if len(args) > 2: + raise TypeError('update() takes at most 2 positional ' + 'arguments (%d given)' % (len(args),)) + elif not args: + raise TypeError('update() takes at least 1 argument (0 given)') + self = args[0] + # Make progressively weaker assumptions about "other" + other = () + if len(args) == 2: + other = args[1] + if isinstance(other, dict): + for key in other: + self[key] = other[key] + elif hasattr(other, 'keys'): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value + for key, value in kwds.items(): + self[key] = value + + __update = update # let subclasses override update without breaking __init__ + + __marker = object() + + def pop(self, key, default=__marker): + '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. + If key is not found, d is returned if given, otherwise KeyError is raised. + + ''' + if key in self: + result = self[key] + del self[key] + return result + if default is self.__marker: + raise KeyError(key) + return default + + def setdefault(self, key, default=None): + 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' + if key in self: + return self[key] + self[key] = default + return default + + def __repr__(self, _repr_running=None): + 'od.__repr__() <==> repr(od)' + if not _repr_running: _repr_running = {} + call_key = id(self), _get_ident() + if call_key in _repr_running: + return '...' + _repr_running[call_key] = 1 + try: + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, self.items()) + finally: + del _repr_running[call_key] + + def __reduce__(self): + 'Return state information for pickling' + items = [[k, self[k]] for k in self] + inst_dict = vars(self).copy() + for k in vars(OrderedDict()): + inst_dict.pop(k, None) + if inst_dict: + return (self.__class__, (items,), inst_dict) + return self.__class__, (items,) + + def copy(self): + 'od.copy() -> a shallow copy of od' + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S + and values equal to v (which defaults to None). + + ''' + d = cls() + for key in iterable: + d[key] = value + return d + + def __eq__(self, other): + '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive + while comparison to a regular mapping is order-insensitive. + + ''' + if isinstance(other, OrderedDict): + return len(self)==len(other) and self.items() == other.items() + return dict.__eq__(self, other) + + def __ne__(self, other): + return not self == other + + # -- the following methods are only used in Python 2.7 -- + + def viewkeys(self): + "od.viewkeys() -> a set-like object providing a view on od's keys" + return KeysView(self) + + def viewvalues(self): + "od.viewvalues() -> an object providing a view on od's values" + return ValuesView(self) + + def viewitems(self): + "od.viewitems() -> a set-like object providing a view on od's items" + return ItemsView(self) + +try: + from logging.config import BaseConfigurator, valid_ident +except ImportError: # pragma: no cover + IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + + + def valid_ident(s): + m = IDENTIFIER.match(s) + if not m: + raise ValueError('Not a valid Python identifier: %r' % s) + return True + + + # The ConvertingXXX classes are wrappers around standard Python containers, + # and they serve to convert any suitable values in the container. The + # conversion converts base dicts, lists and tuples to their wrapped + # equivalents, whereas strings which match a conversion format are converted + # appropriately. + # + # Each wrapper should have a configurator attribute holding the actual + # configurator to use for conversion. + + class ConvertingDict(dict): + """A converting dictionary wrapper.""" + + def __getitem__(self, key): + value = dict.__getitem__(self, key) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def get(self, key, default=None): + value = dict.get(self, key, default) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, key, default=None): + value = dict.pop(self, key, default) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class ConvertingList(list): + """A converting list wrapper.""" + def __getitem__(self, key): + value = list.__getitem__(self, key) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, idx=-1): + value = list.pop(self, idx) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + class ConvertingTuple(tuple): + """A converting tuple wrapper.""" + def __getitem__(self, key): + value = tuple.__getitem__(self, key) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class BaseConfigurator(object): + """ + The configurator base class which defines some useful defaults. + """ + + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') + + WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') + DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') + INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') + DIGIT_PATTERN = re.compile(r'^\d+$') + + value_converters = { + 'ext' : 'ext_convert', + 'cfg' : 'cfg_convert', + } + + # We might want to use a different one, e.g. importlib + importer = staticmethod(__import__) + + def __init__(self, config): + self.config = ConvertingDict(config) + self.config.configurator = self + + def resolve(self, s): + """ + Resolve strings to objects using standard import and attribute + syntax. + """ + name = s.split('.') + used = name.pop(0) + try: + found = self.importer(used) + for frag in name: + used += '.' + frag + try: + found = getattr(found, frag) + except AttributeError: + self.importer(used) + found = getattr(found, frag) + return found + except ImportError: + e, tb = sys.exc_info()[1:] + v = ValueError('Cannot resolve %r: %s' % (s, e)) + v.__cause__, v.__traceback__ = e, tb + raise v + + def ext_convert(self, value): + """Default converter for the ext:// protocol.""" + return self.resolve(value) + + def cfg_convert(self, value): + """Default converter for the cfg:// protocol.""" + rest = value + m = self.WORD_PATTERN.match(rest) + if m is None: + raise ValueError("Unable to convert %r" % value) + else: + rest = rest[m.end():] + d = self.config[m.groups()[0]] + #print d, rest + while rest: + m = self.DOT_PATTERN.match(rest) + if m: + d = d[m.groups()[0]] + else: + m = self.INDEX_PATTERN.match(rest) + if m: + idx = m.groups()[0] + if not self.DIGIT_PATTERN.match(idx): + d = d[idx] + else: + try: + n = int(idx) # try as number first (most likely) + d = d[n] + except TypeError: + d = d[idx] + if m: + rest = rest[m.end():] + else: + raise ValueError('Unable to convert ' + '%r at %r' % (value, rest)) + #rest should be empty + return d + + def convert(self, value): + """ + Convert values to an appropriate type. dicts, lists and tuples are + replaced by their converting alternatives. Strings are checked to + see if they have a conversion format and are converted if they do. + """ + if not isinstance(value, ConvertingDict) and isinstance(value, dict): + value = ConvertingDict(value) + value.configurator = self + elif not isinstance(value, ConvertingList) and isinstance(value, list): + value = ConvertingList(value) + value.configurator = self + elif not isinstance(value, ConvertingTuple) and\ + isinstance(value, tuple): + value = ConvertingTuple(value) + value.configurator = self + elif isinstance(value, string_types): + m = self.CONVERT_PATTERN.match(value) + if m: + d = m.groupdict() + prefix = d['prefix'] + converter = self.value_converters.get(prefix, None) + if converter: + suffix = d['suffix'] + converter = getattr(self, converter) + value = converter(suffix) + return value + + def configure_custom(self, config): + """Configure an object with a user-supplied factory.""" + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) + result = c(**kwargs) + if props: + for name, value in props.items(): + setattr(result, name, value) + return result + + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/database.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/database.py new file mode 100644 index 0000000..29c62fb --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/database.py @@ -0,0 +1,1305 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2014 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""PEP 376 implementation.""" + +from __future__ import unicode_literals + +import base64 +import codecs +import contextlib +import hashlib +import logging +import os +import posixpath +import sys +import zipimport + +from . import DistlibException, resources +from .compat import StringIO +from .version import get_scheme, UnsupportedVersionError +from .metadata import Metadata, METADATA_FILENAME +from .util import (parse_requirement, cached_property, parse_name_and_version, + read_exports, write_exports, CSVReader, CSVWriter) + + +__all__ = ['Distribution', 'BaseInstalledDistribution', + 'InstalledDistribution', 'EggInfoDistribution', + 'DistributionPath'] + + +logger = logging.getLogger(__name__) + +EXPORTS_FILENAME = 'pydist-exports.json' +COMMANDS_FILENAME = 'pydist-commands.json' + +DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', + 'RESOURCES', EXPORTS_FILENAME, 'SHARED') + +DISTINFO_EXT = '.dist-info' + + +class _Cache(object): + """ + A simple cache mapping names and .dist-info paths to distributions + """ + def __init__(self): + """ + Initialise an instance. There is normally one for each DistributionPath. + """ + self.name = {} + self.path = {} + self.generated = False + + def clear(self): + """ + Clear the cache, setting it to its initial state. + """ + self.name.clear() + self.path.clear() + self.generated = False + + def add(self, dist): + """ + Add a distribution to the cache. + :param dist: The distribution to add. + """ + if dist.path not in self.path: + self.path[dist.path] = dist + self.name.setdefault(dist.key, []).append(dist) + + +class DistributionPath(object): + """ + Represents a set of distributions installed on a path (typically sys.path). + """ + def __init__(self, path=None, include_egg=False): + """ + Create an instance from a path, optionally including legacy (distutils/ + setuptools/distribute) distributions. + :param path: The path to use, as a list of directories. If not specified, + sys.path is used. + :param include_egg: If True, this instance will look for and return legacy + distributions as well as those based on PEP 376. + """ + if path is None: + path = sys.path + self.path = path + self._include_dist = True + self._include_egg = include_egg + + self._cache = _Cache() + self._cache_egg = _Cache() + self._cache_enabled = True + self._scheme = get_scheme('default') + + def _get_cache_enabled(self): + return self._cache_enabled + + def _set_cache_enabled(self, value): + self._cache_enabled = value + + cache_enabled = property(_get_cache_enabled, _set_cache_enabled) + + def clear_cache(self): + """ + Clears the internal cache. + """ + self._cache.clear() + self._cache_egg.clear() + + + def _yield_distributions(self): + """ + Yield .dist-info and/or .egg(-info) distributions. + """ + # We need to check if we've seen some resources already, because on + # some Linux systems (e.g. some Debian/Ubuntu variants) there are + # symlinks which alias other files in the environment. + seen = set() + for path in self.path: + finder = resources.finder_for_path(path) + if finder is None: + continue + r = finder.find('') + if not r or not r.is_container: + continue + rset = sorted(r.resources) + for entry in rset: + r = finder.find(entry) + if not r or r.path in seen: + continue + if self._include_dist and entry.endswith(DISTINFO_EXT): + metadata_path = posixpath.join(entry, METADATA_FILENAME) + pydist = finder.find(metadata_path) + if not pydist: + continue + + metadata = Metadata(fileobj=pydist.as_stream(), + scheme='legacy') + logger.debug('Found %s', r.path) + seen.add(r.path) + yield new_dist_class(r.path, metadata=metadata, + env=self) + elif self._include_egg and entry.endswith(('.egg-info', + '.egg')): + logger.debug('Found %s', r.path) + seen.add(r.path) + yield old_dist_class(r.path, self) + + def _generate_cache(self): + """ + Scan the path for distributions and populate the cache with + those that are found. + """ + gen_dist = not self._cache.generated + gen_egg = self._include_egg and not self._cache_egg.generated + if gen_dist or gen_egg: + for dist in self._yield_distributions(): + if isinstance(dist, InstalledDistribution): + self._cache.add(dist) + else: + self._cache_egg.add(dist) + + if gen_dist: + self._cache.generated = True + if gen_egg: + self._cache_egg.generated = True + + @classmethod + def distinfo_dirname(cls, name, version): + """ + The *name* and *version* parameters are converted into their + filename-escaped form, i.e. any ``'-'`` characters are replaced + with ``'_'`` other than the one in ``'dist-info'`` and the one + separating the name from the version number. + + :parameter name: is converted to a standard distribution name by replacing + any runs of non- alphanumeric characters with a single + ``'-'``. + :type name: string + :parameter version: is converted to a standard version string. Spaces + become dots, and all other non-alphanumeric characters + (except dots) become dashes, with runs of multiple + dashes condensed to a single dash. + :type version: string + :returns: directory name + :rtype: string""" + name = name.replace('-', '_') + return '-'.join([name, version]) + DISTINFO_EXT + + def get_distributions(self): + """ + Provides an iterator that looks for distributions and returns + :class:`InstalledDistribution` or + :class:`EggInfoDistribution` instances for each one of them. + + :rtype: iterator of :class:`InstalledDistribution` and + :class:`EggInfoDistribution` instances + """ + if not self._cache_enabled: + for dist in self._yield_distributions(): + yield dist + else: + self._generate_cache() + + for dist in self._cache.path.values(): + yield dist + + if self._include_egg: + for dist in self._cache_egg.path.values(): + yield dist + + def get_distribution(self, name): + """ + Looks for a named distribution on the path. + + This function only returns the first result found, as no more than one + value is expected. If nothing is found, ``None`` is returned. + + :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` + or ``None`` + """ + result = None + name = name.lower() + if not self._cache_enabled: + for dist in self._yield_distributions(): + if dist.key == name: + result = dist + break + else: + self._generate_cache() + + if name in self._cache.name: + result = self._cache.name[name][0] + elif self._include_egg and name in self._cache_egg.name: + result = self._cache_egg.name[name][0] + return result + + def provides_distribution(self, name, version=None): + """ + Iterates over all distributions to find which distributions provide *name*. + If a *version* is provided, it will be used to filter the results. + + This function only returns the first result found, since no more than + one values are expected. If the directory is not found, returns ``None``. + + :parameter version: a version specifier that indicates the version + required, conforming to the format in ``PEP-345`` + + :type name: string + :type version: string + """ + matcher = None + if not version is None: + try: + matcher = self._scheme.matcher('%s (%s)' % (name, version)) + except ValueError: + raise DistlibException('invalid name or version: %r, %r' % + (name, version)) + + for dist in self.get_distributions(): + provided = dist.provides + + for p in provided: + p_name, p_ver = parse_name_and_version(p) + if matcher is None: + if p_name == name: + yield dist + break + else: + if p_name == name and matcher.match(p_ver): + yield dist + break + + def get_file_path(self, name, relative_path): + """ + Return the path to a resource file. + """ + dist = self.get_distribution(name) + if dist is None: + raise LookupError('no distribution named %r found' % name) + return dist.get_resource_path(relative_path) + + def get_exported_entries(self, category, name=None): + """ + Return all of the exported entries in a particular category. + + :param category: The category to search for entries. + :param name: If specified, only entries with that name are returned. + """ + for dist in self.get_distributions(): + r = dist.exports + if category in r: + d = r[category] + if name is not None: + if name in d: + yield d[name] + else: + for v in d.values(): + yield v + + +class Distribution(object): + """ + A base class for distributions, whether installed or from indexes. + Either way, it must have some metadata, so that's all that's needed + for construction. + """ + + build_time_dependency = False + """ + Set to True if it's known to be only a build-time dependency (i.e. + not needed after installation). + """ + + requested = False + """A boolean that indicates whether the ``REQUESTED`` metadata file is + present (in other words, whether the package was installed by user + request or it was installed as a dependency).""" + + def __init__(self, metadata): + """ + Initialise an instance. + :param metadata: The instance of :class:`Metadata` describing this + distribution. + """ + self.metadata = metadata + self.name = metadata.name + self.key = self.name.lower() # for case-insensitive comparisons + self.version = metadata.version + self.locator = None + self.digest = None + self.extras = None # additional features requested + self.context = None # environment marker overrides + self.download_urls = set() + self.digests = {} + + @property + def source_url(self): + """ + The source archive download URL for this distribution. + """ + return self.metadata.source_url + + download_url = source_url # Backward compatibility + + @property + def name_and_version(self): + """ + A utility property which displays the name and version in parentheses. + """ + return '%s (%s)' % (self.name, self.version) + + @property + def provides(self): + """ + A set of distribution names and versions provided by this distribution. + :return: A set of "name (version)" strings. + """ + plist = self.metadata.provides + s = '%s (%s)' % (self.name, self.version) + if s not in plist: + plist.append(s) + return plist + + def _get_requirements(self, req_attr): + md = self.metadata + logger.debug('Getting requirements from metadata %r', md.todict()) + reqts = getattr(md, req_attr) + return set(md.get_requirements(reqts, extras=self.extras, + env=self.context)) + + @property + def run_requires(self): + return self._get_requirements('run_requires') + + @property + def meta_requires(self): + return self._get_requirements('meta_requires') + + @property + def build_requires(self): + return self._get_requirements('build_requires') + + @property + def test_requires(self): + return self._get_requirements('test_requires') + + @property + def dev_requires(self): + return self._get_requirements('dev_requires') + + def matches_requirement(self, req): + """ + Say if this instance matches (fulfills) a requirement. + :param req: The requirement to match. + :rtype req: str + :return: True if it matches, else False. + """ + # Requirement may contain extras - parse to lose those + # from what's passed to the matcher + r = parse_requirement(req) + scheme = get_scheme(self.metadata.scheme) + try: + matcher = scheme.matcher(r.requirement) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + result = False + for p in self.provides: + p_name, p_ver = parse_name_and_version(p) + if p_name != name: + continue + try: + result = matcher.match(p_ver) + break + except UnsupportedVersionError: + pass + return result + + def __repr__(self): + """ + Return a textual representation of this instance, + """ + if self.source_url: + suffix = ' [%s]' % self.source_url + else: + suffix = '' + return '' % (self.name, self.version, suffix) + + def __eq__(self, other): + """ + See if this distribution is the same as another. + :param other: The distribution to compare with. To be equal to one + another. distributions must have the same type, name, + version and source_url. + :return: True if it is the same, else False. + """ + if type(other) is not type(self): + result = False + else: + result = (self.name == other.name and + self.version == other.version and + self.source_url == other.source_url) + return result + + def __hash__(self): + """ + Compute hash in a way which matches the equality test. + """ + return hash(self.name) + hash(self.version) + hash(self.source_url) + + +class BaseInstalledDistribution(Distribution): + """ + This is the base class for installed distributions (whether PEP 376 or + legacy). + """ + + hasher = None + + def __init__(self, metadata, path, env=None): + """ + Initialise an instance. + :param metadata: An instance of :class:`Metadata` which describes the + distribution. This will normally have been initialised + from a metadata file in the ``path``. + :param path: The path of the ``.dist-info`` or ``.egg-info`` + directory for the distribution. + :param env: This is normally the :class:`DistributionPath` + instance where this distribution was found. + """ + super(BaseInstalledDistribution, self).__init__(metadata) + self.path = path + self.dist_path = env + + def get_hash(self, data, hasher=None): + """ + Get the hash of some data, using a particular hash algorithm, if + specified. + + :param data: The data to be hashed. + :type data: bytes + :param hasher: The name of a hash implementation, supported by hashlib, + or ``None``. Examples of valid values are ``'sha1'``, + ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and + ``'sha512'``. If no hasher is specified, the ``hasher`` + attribute of the :class:`InstalledDistribution` instance + is used. If the hasher is determined to be ``None``, MD5 + is used as the hashing algorithm. + :returns: The hash of the data. If a hasher was explicitly specified, + the returned hash will be prefixed with the specified hasher + followed by '='. + :rtype: str + """ + if hasher is None: + hasher = self.hasher + if hasher is None: + hasher = hashlib.md5 + prefix = '' + else: + hasher = getattr(hashlib, hasher) + prefix = '%s=' % self.hasher + digest = hasher(data).digest() + digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') + return '%s%s' % (prefix, digest) + + +class InstalledDistribution(BaseInstalledDistribution): + """ + Created with the *path* of the ``.dist-info`` directory provided to the + constructor. It reads the metadata contained in ``pydist.json`` when it is + instantiated., or uses a passed in Metadata instance (useful for when + dry-run mode is being used). + """ + + hasher = 'sha256' + + def __init__(self, path, metadata=None, env=None): + self.finder = finder = resources.finder_for_path(path) + if finder is None: + import pdb; pdb.set_trace () + if env and env._cache_enabled and path in env._cache.path: + metadata = env._cache.path[path].metadata + elif metadata is None: + r = finder.find(METADATA_FILENAME) + # Temporary - for legacy support + if r is None: + r = finder.find('METADATA') + if r is None: + raise ValueError('no %s found in %s' % (METADATA_FILENAME, + path)) + with contextlib.closing(r.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + + super(InstalledDistribution, self).__init__(metadata, path, env) + + if env and env._cache_enabled: + env._cache.add(self) + + try: + r = finder.find('REQUESTED') + except AttributeError: + import pdb; pdb.set_trace () + self.requested = r is not None + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def _get_records(self): + """ + Get the list of installed files for the distribution + :return: A list of tuples of path, hash and size. Note that hash and + size might be ``None`` for some entries. The path is exactly + as stored in the file (which is as in PEP 376). + """ + results = [] + r = self.get_distinfo_resource('RECORD') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as record_reader: + # Base location is parent dir of .dist-info dir + #base_location = os.path.dirname(self.path) + #base_location = os.path.abspath(base_location) + for row in record_reader: + missing = [None for i in range(len(row), 3)] + path, checksum, size = row + missing + #if not os.path.isabs(path): + # path = path.replace('/', os.sep) + # path = os.path.join(base_location, path) + results.append((path, checksum, size)) + return results + + @cached_property + def exports(self): + """ + Return the information exported by this distribution. + :return: A dictionary of exports, mapping an export category to a dict + of :class:`ExportEntry` instances describing the individual + export entries, and keyed by name. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + result = self.read_exports() + return result + + def read_exports(self): + """ + Read exports data from a file in .ini format. + + :return: A dictionary of exports, mapping an export category to a list + of :class:`ExportEntry` instances describing the individual + export entries. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + with contextlib.closing(r.as_stream()) as stream: + result = read_exports(stream) + return result + + def write_exports(self, exports): + """ + Write a dictionary of exports to a file in .ini format. + :param exports: A dictionary of exports, mapping an export category to + a list of :class:`ExportEntry` instances describing the + individual export entries. + """ + rf = self.get_distinfo_file(EXPORTS_FILENAME) + with open(rf, 'w') as f: + write_exports(exports, f) + + def get_resource_path(self, relative_path): + """ + NOTE: This API may change in the future. + + Return the absolute path to a resource file with the given relative + path. + + :param relative_path: The path, relative to .dist-info, of the resource + of interest. + :return: The absolute path where the resource is to be found. + """ + r = self.get_distinfo_resource('RESOURCES') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as resources_reader: + for relative, destination in resources_reader: + if relative == relative_path: + return destination + raise KeyError('no resource file with relative path %r ' + 'is installed' % relative_path) + + def list_installed_files(self): + """ + Iterates over the ``RECORD`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: iterator of (path, hash, size) + """ + for result in self._get_records(): + yield result + + def write_installed_files(self, paths, prefix, dry_run=False): + """ + Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any + existing ``RECORD`` file is silently overwritten. + + prefix is used to determine when to write absolute paths. + """ + prefix = os.path.join(prefix, '') + base = os.path.dirname(self.path) + base_under_prefix = base.startswith(prefix) + base = os.path.join(base, '') + record_path = self.get_distinfo_file('RECORD') + logger.info('creating %s', record_path) + if dry_run: + return None + with CSVWriter(record_path) as writer: + for path in paths: + if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): + # do not put size and hash, as in PEP-376 + hash_value = size = '' + else: + size = '%d' % os.path.getsize(path) + with open(path, 'rb') as fp: + hash_value = self.get_hash(fp.read()) + if path.startswith(base) or (base_under_prefix and + path.startswith(prefix)): + path = os.path.relpath(path, base) + writer.writerow((path, hash_value, size)) + + # add the RECORD file itself + if record_path.startswith(base): + record_path = os.path.relpath(record_path, base) + writer.writerow((record_path, '', '')) + return record_path + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + base = os.path.dirname(self.path) + record_path = self.get_distinfo_file('RECORD') + for path, hash_value, size in self.list_installed_files(): + if not os.path.isabs(path): + path = os.path.join(base, path) + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + elif os.path.isfile(path): + actual_size = str(os.path.getsize(path)) + if size and actual_size != size: + mismatches.append((path, 'size', size, actual_size)) + elif hash_value: + if '=' in hash_value: + hasher = hash_value.split('=', 1)[0] + else: + hasher = None + + with open(path, 'rb') as f: + actual_hash = self.get_hash(f.read(), hasher) + if actual_hash != hash_value: + mismatches.append((path, 'hash', hash_value, actual_hash)) + return mismatches + + @cached_property + def shared_locations(self): + """ + A dictionary of shared locations whose keys are in the set 'prefix', + 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. + The corresponding value is the absolute path of that category for + this distribution, and takes into account any paths selected by the + user at installation time (e.g. via command-line arguments). In the + case of the 'namespace' key, this would be a list of absolute paths + for the roots of namespace packages in this distribution. + + The first time this property is accessed, the relevant information is + read from the SHARED file in the .dist-info directory. + """ + result = {} + shared_path = os.path.join(self.path, 'SHARED') + if os.path.isfile(shared_path): + with codecs.open(shared_path, 'r', encoding='utf-8') as f: + lines = f.read().splitlines() + for line in lines: + key, value = line.split('=', 1) + if key == 'namespace': + result.setdefault(key, []).append(value) + else: + result[key] = value + return result + + def write_shared_locations(self, paths, dry_run=False): + """ + Write shared location information to the SHARED file in .dist-info. + :param paths: A dictionary as described in the documentation for + :meth:`shared_locations`. + :param dry_run: If True, the action is logged but no file is actually + written. + :return: The path of the file written to. + """ + shared_path = os.path.join(self.path, 'SHARED') + logger.info('creating %s', shared_path) + if dry_run: + return None + lines = [] + for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): + path = paths[key] + if os.path.isdir(paths[key]): + lines.append('%s=%s' % (key, path)) + for ns in paths.get('namespace', ()): + lines.append('namespace=%s' % ns) + + with codecs.open(shared_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + return shared_path + + def get_distinfo_resource(self, path): + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + finder = resources.finder_for_path(self.path) + if finder is None: + raise DistlibException('Unable to get a finder for %s' % self.path) + return finder.find(path) + + def get_distinfo_file(self, path): + """ + Returns a path located under the ``.dist-info`` directory. Returns a + string representing the path. + + :parameter path: a ``'/'``-separated path relative to the + ``.dist-info`` directory or an absolute path; + If *path* is an absolute path and doesn't start + with the ``.dist-info`` directory path, + a :class:`DistlibException` is raised + :type path: str + :rtype: str + """ + # Check if it is an absolute path # XXX use relpath, add tests + if path.find(os.sep) >= 0: + # it's an absolute path? + distinfo_dirname, path = path.split(os.sep)[-2:] + if distinfo_dirname != self.path.split(os.sep)[-1]: + raise DistlibException( + 'dist-info file %r does not belong to the %r %s ' + 'distribution' % (path, self.name, self.version)) + + # The file must be relative + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + + return os.path.join(self.path, path) + + def list_distinfo_files(self): + """ + Iterates over the ``RECORD`` entries and returns paths for each line if + the path is pointing to a file located in the ``.dist-info`` directory + or one of its subdirectories. + + :returns: iterator of paths + """ + base = os.path.dirname(self.path) + for path, checksum, size in self._get_records(): + # XXX add separator or use real relpath algo + if not os.path.isabs(path): + path = os.path.join(base, path) + if path.startswith(self.path): + yield path + + def __eq__(self, other): + return (isinstance(other, InstalledDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + + +class EggInfoDistribution(BaseInstalledDistribution): + """Created with the *path* of the ``.egg-info`` directory or file provided + to the constructor. It reads the metadata contained in the file itself, or + if the given path happens to be a directory, the metadata is read from the + file ``PKG-INFO`` under that directory.""" + + requested = True # as we have no way of knowing, assume it was + shared_locations = {} + + def __init__(self, path, env=None): + def set_name_and_version(s, n, v): + s.name = n + s.key = n.lower() # for case-insensitive comparisons + s.version = v + + self.path = path + self.dist_path = env + if env and env._cache_enabled and path in env._cache_egg.path: + metadata = env._cache_egg.path[path].metadata + set_name_and_version(self, metadata.name, metadata.version) + else: + metadata = self._get_metadata(path) + + # Need to be set before caching + set_name_and_version(self, metadata.name, metadata.version) + + if env and env._cache_enabled: + env._cache_egg.add(self) + super(EggInfoDistribution, self).__init__(metadata, path, env) + + def _get_metadata(self, path): + requires = None + + def parse_requires_data(data): + """Create a list of dependencies from a requires.txt file. + + *data*: the contents of a setuptools-produced requires.txt file. + """ + reqs = [] + lines = data.splitlines() + for line in lines: + line = line.strip() + if line.startswith('['): + logger.warning('Unexpected line: quitting requirement scan: %r', + line) + break + r = parse_requirement(line) + if not r: + logger.warning('Not recognised as a requirement: %r', line) + continue + if r.extras: + logger.warning('extra requirements in requires.txt are ' + 'not supported') + if not r.constraints: + reqs.append(r.name) + else: + cons = ', '.join('%s%s' % c for c in r.constraints) + reqs.append('%s (%s)' % (r.name, cons)) + return reqs + + def parse_requires_path(req_path): + """Create a list of dependencies from a requires.txt file. + + *req_path*: the path to a setuptools-produced requires.txt file. + """ + + reqs = [] + try: + with codecs.open(req_path, 'r', 'utf-8') as fp: + reqs = parse_requires_data(fp.read()) + except IOError: + pass + return reqs + + if path.endswith('.egg'): + if os.path.isdir(path): + meta_path = os.path.join(path, 'EGG-INFO', 'PKG-INFO') + metadata = Metadata(path=meta_path, scheme='legacy') + req_path = os.path.join(path, 'EGG-INFO', 'requires.txt') + requires = parse_requires_path(req_path) + else: + # FIXME handle the case where zipfile is not available + zipf = zipimport.zipimporter(path) + fileobj = StringIO( + zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) + metadata = Metadata(fileobj=fileobj, scheme='legacy') + try: + data = zipf.get_data('EGG-INFO/requires.txt') + requires = parse_requires_data(data.decode('utf-8')) + except IOError: + requires = None + elif path.endswith('.egg-info'): + if os.path.isdir(path): + req_path = os.path.join(path, 'requires.txt') + requires = parse_requires_path(req_path) + path = os.path.join(path, 'PKG-INFO') + metadata = Metadata(path=path, scheme='legacy') + else: + raise DistlibException('path must end with .egg-info or .egg, ' + 'got %r' % path) + + if requires: + metadata.add_requirements(requires) + return metadata + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + for path, _, _ in self.list_installed_files(): + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + return mismatches + + def list_installed_files(self): + """ + Iterates over the ``installed-files.txt`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: a list of (path, hash, size) + """ + + def _md5(path): + f = open(path, 'rb') + try: + content = f.read() + finally: + f.close() + return hashlib.md5(content).hexdigest() + + def _size(path): + return os.stat(path).st_size + + record_path = os.path.join(self.path, 'installed-files.txt') + result = [] + if os.path.exists(record_path): + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + p = os.path.normpath(os.path.join(self.path, line)) + # "./" is present as a marker between installed files + # and installation metadata files + if not os.path.exists(p): + logger.warning('Non-existent file: %s', p) + if p.endswith(('.pyc', '.pyo')): + continue + #otherwise fall through and fail + if not os.path.isdir(p): + result.append((p, _md5(p), _size(p))) + result.append((record_path, None, None)) + return result + + def list_distinfo_files(self, absolute=False): + """ + Iterates over the ``installed-files.txt`` entries and returns paths for + each line if the path is pointing to a file located in the + ``.egg-info`` directory or one of its subdirectories. + + :parameter absolute: If *absolute* is ``True``, each returned path is + transformed into a local absolute path. Otherwise the + raw value from ``installed-files.txt`` is returned. + :type absolute: boolean + :returns: iterator of paths + """ + record_path = os.path.join(self.path, 'installed-files.txt') + skip = True + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if line == './': + skip = False + continue + if not skip: + p = os.path.normpath(os.path.join(self.path, line)) + if p.startswith(self.path): + if absolute: + yield p + else: + yield line + + def __eq__(self, other): + return (isinstance(other, EggInfoDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + +new_dist_class = InstalledDistribution +old_dist_class = EggInfoDistribution + + +class DependencyGraph(object): + """ + Represents a dependency graph between distributions. + + The dependency relationships are stored in an ``adjacency_list`` that maps + distributions to a list of ``(other, label)`` tuples where ``other`` + is a distribution and the edge is labeled with ``label`` (i.e. the version + specifier, if such was provided). Also, for more efficient traversal, for + every distribution ``x``, a list of predecessors is kept in + ``reverse_list[x]``. An edge from distribution ``a`` to + distribution ``b`` means that ``a`` depends on ``b``. If any missing + dependencies are found, they are stored in ``missing``, which is a + dictionary that maps distributions to a list of requirements that were not + provided by any other distributions. + """ + + def __init__(self): + self.adjacency_list = {} + self.reverse_list = {} + self.missing = {} + + def add_distribution(self, distribution): + """Add the *distribution* to the graph. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + """ + self.adjacency_list[distribution] = [] + self.reverse_list[distribution] = [] + #self.missing[distribution] = [] + + def add_edge(self, x, y, label=None): + """Add an edge from distribution *x* to distribution *y* with the given + *label*. + + :type x: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type y: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type label: ``str`` or ``None`` + """ + self.adjacency_list[x].append((y, label)) + # multiple edges are allowed, so be careful + if x not in self.reverse_list[y]: + self.reverse_list[y].append(x) + + def add_missing(self, distribution, requirement): + """ + Add a missing *requirement* for the given *distribution*. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + :type requirement: ``str`` + """ + logger.debug('%s missing %r', distribution, requirement) + self.missing.setdefault(distribution, []).append(requirement) + + def _repr_dist(self, dist): + return '%s %s' % (dist.name, dist.version) + + def repr_node(self, dist, level=1): + """Prints only a subgraph""" + output = [self._repr_dist(dist)] + for other, label in self.adjacency_list[dist]: + dist = self._repr_dist(other) + if label is not None: + dist = '%s [%s]' % (dist, label) + output.append(' ' * level + str(dist)) + suboutput = self.repr_node(other, level + 1) + subs = suboutput.split('\n') + output.extend(subs[1:]) + return '\n'.join(output) + + def to_dot(self, f, skip_disconnected=True): + """Writes a DOT output for the graph to the provided file *f*. + + If *skip_disconnected* is set to ``True``, then all distributions + that are not dependent on any other distribution are skipped. + + :type f: has to support ``file``-like operations + :type skip_disconnected: ``bool`` + """ + disconnected = [] + + f.write("digraph dependencies {\n") + for dist, adjs in self.adjacency_list.items(): + if len(adjs) == 0 and not skip_disconnected: + disconnected.append(dist) + for other, label in adjs: + if not label is None: + f.write('"%s" -> "%s" [label="%s"]\n' % + (dist.name, other.name, label)) + else: + f.write('"%s" -> "%s"\n' % (dist.name, other.name)) + if not skip_disconnected and len(disconnected) > 0: + f.write('subgraph disconnected {\n') + f.write('label = "Disconnected"\n') + f.write('bgcolor = red\n') + + for dist in disconnected: + f.write('"%s"' % dist.name) + f.write('\n') + f.write('}\n') + f.write('}\n') + + def topological_sort(self): + """ + Perform a topological sort of the graph. + :return: A tuple, the first element of which is a topologically sorted + list of distributions, and the second element of which is a + list of distributions that cannot be sorted because they have + circular dependencies and so form a cycle. + """ + result = [] + # Make a shallow copy of the adjacency list + alist = {} + for k, v in self.adjacency_list.items(): + alist[k] = v[:] + while True: + # See what we can remove in this run + to_remove = [] + for k, v in list(alist.items())[:]: + if not v: + to_remove.append(k) + del alist[k] + if not to_remove: + # What's left in alist (if anything) is a cycle. + break + # Remove from the adjacency list of others + for k, v in alist.items(): + alist[k] = [(d, r) for d, r in v if d not in to_remove] + logger.debug('Moving to result: %s', + ['%s (%s)' % (d.name, d.version) for d in to_remove]) + result.extend(to_remove) + return result, list(alist.keys()) + + def __repr__(self): + """Representation of the graph""" + output = [] + for dist, adjs in self.adjacency_list.items(): + output.append(self.repr_node(dist)) + return '\n'.join(output) + + +def make_graph(dists, scheme='default'): + """Makes a dependency graph from the given distributions. + + :parameter dists: a list of distributions + :type dists: list of :class:`distutils2.database.InstalledDistribution` and + :class:`distutils2.database.EggInfoDistribution` instances + :rtype: a :class:`DependencyGraph` instance + """ + scheme = get_scheme(scheme) + graph = DependencyGraph() + provided = {} # maps names to lists of (version, dist) tuples + + # first, build the graph and find out what's provided + for dist in dists: + graph.add_distribution(dist) + + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + provided.setdefault(name, []).append((version, dist)) + + # now make the edges + for dist in dists: + requires = (dist.run_requires | dist.meta_requires | + dist.build_requires | dist.dev_requires) + for req in requires: + try: + matcher = scheme.matcher(req) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + matched = False + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + graph.add_edge(dist, provider, req) + matched = True + break + if not matched: + graph.add_missing(dist, req) + return graph + + +def get_dependent_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + dependent on *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + dep = [dist] # dependent distributions + todo = graph.reverse_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop() + dep.append(d) + for succ in graph.reverse_list[d]: + if succ not in dep: + todo.append(succ) + + dep.pop(0) # remove dist from dep, was there to prevent infinite loops + return dep + + +def get_required_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + required by *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + req = [] # required distributions + todo = graph.adjacency_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop()[0] + req.append(d) + for pred in graph.adjacency_list[d]: + if pred not in req: + todo.append(pred) + + return req + + +def make_dist(name, version, **kwargs): + """ + A convenience method for making a dist given just a name and version. + """ + summary = kwargs.pop('summary', 'Placeholder for summary') + md = Metadata(**kwargs) + md.name = name + md.version = version + md.summary = summary or 'Plaeholder for summary' + return Distribution(md) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/index.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/index.py new file mode 100644 index 0000000..73037c9 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/index.py @@ -0,0 +1,513 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import hashlib +import logging +import os +import shutil +import subprocess +import tempfile +try: + from threading import Thread +except ImportError: + from dummy_threading import Thread + +from . import DistlibException +from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, + urlparse, build_opener, string_types) +from .util import cached_property, zip_dir, ServerProxy + +logger = logging.getLogger(__name__) + +DEFAULT_INDEX = 'https://pypi.python.org/pypi' +DEFAULT_REALM = 'pypi' + +class PackageIndex(object): + """ + This class represents a package index compatible with PyPI, the Python + Package Index. + """ + + boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' + + def __init__(self, url=None): + """ + Initialise an instance. + + :param url: The URL of the index. If not specified, the URL for PyPI is + used. + """ + self.url = url or DEFAULT_INDEX + self.read_configuration() + scheme, netloc, path, params, query, frag = urlparse(self.url) + if params or query or frag or scheme not in ('http', 'https'): + raise DistlibException('invalid repository: %s' % self.url) + self.password_handler = None + self.ssl_verifier = None + self.gpg = None + self.gpg_home = None + self.rpc_proxy = None + with open(os.devnull, 'w') as sink: + for s in ('gpg2', 'gpg'): + try: + rc = subprocess.check_call([s, '--version'], stdout=sink, + stderr=sink) + if rc == 0: + self.gpg = s + break + except OSError: + pass + + def _get_pypirc_command(self): + """ + Get the distutils command for interacting with PyPI configurations. + :return: the command. + """ + from distutils.core import Distribution + from distutils.config import PyPIRCCommand + d = Distribution() + return PyPIRCCommand(d) + + def read_configuration(self): + """ + Read the PyPI access configuration as supported by distutils, getting + PyPI to do the acutal work. This populates ``username``, ``password``, + ``realm`` and ``url`` attributes from the configuration. + """ + # get distutils to do the work + c = self._get_pypirc_command() + c.repository = self.url + cfg = c._read_pypirc() + self.username = cfg.get('username') + self.password = cfg.get('password') + self.realm = cfg.get('realm', 'pypi') + self.url = cfg.get('repository', self.url) + + def save_configuration(self): + """ + Save the PyPI access configuration. You must have set ``username`` and + ``password`` attributes before calling this method. + + Again, distutils is used to do the actual work. + """ + self.check_credentials() + # get distutils to do the work + c = self._get_pypirc_command() + c._store_pypirc(self.username, self.password) + + def check_credentials(self): + """ + Check that ``username`` and ``password`` have been set, and raise an + exception if not. + """ + if self.username is None or self.password is None: + raise DistlibException('username and password must be set') + pm = HTTPPasswordMgr() + _, netloc, _, _, _, _ = urlparse(self.url) + pm.add_password(self.realm, netloc, self.username, self.password) + self.password_handler = HTTPBasicAuthHandler(pm) + + def register(self, metadata): + """ + Register a distribution on PyPI, using the provided metadata. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the distribution to be + registered. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + metadata.validate() + d = metadata.todict() + d[':action'] = 'verify' + request = self.encode_request(d.items(), []) + response = self.send_request(request) + d[':action'] = 'submit' + request = self.encode_request(d.items(), []) + return self.send_request(request) + + def _reader(self, name, stream, outbuf): + """ + Thread runner for reading lines of from a subprocess into a buffer. + + :param name: The logical name of the stream (used for logging only). + :param stream: The stream to read from. This will typically a pipe + connected to the output stream of a subprocess. + :param outbuf: The list to append the read lines to. + """ + while True: + s = stream.readline() + if not s: + break + s = s.decode('utf-8').rstrip() + outbuf.append(s) + logger.debug('%s: %s' % (name, s)) + stream.close() + + def get_sign_command(self, filename, signer, sign_password, + keystore=None): + """ + Return a suitable command for signing a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The signing command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + if sign_password is not None: + cmd.extend(['--batch', '--passphrase-fd', '0']) + td = tempfile.mkdtemp() + sf = os.path.join(td, os.path.basename(filename) + '.asc') + cmd.extend(['--detach-sign', '--armor', '--local-user', + signer, '--output', sf, filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd, sf + + def run_command(self, cmd, input_data=None): + """ + Run a command in a child process , passing it any input data specified. + + :param cmd: The command to run. + :param input_data: If specified, this must be a byte string containing + data to be sent to the child process. + :return: A tuple consisting of the subprocess' exit code, a list of + lines read from the subprocess' ``stdout``, and a list of + lines read from the subprocess' ``stderr``. + """ + kwargs = { + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE, + } + if input_data is not None: + kwargs['stdin'] = subprocess.PIPE + stdout = [] + stderr = [] + p = subprocess.Popen(cmd, **kwargs) + # We don't use communicate() here because we may need to + # get clever with interacting with the command + t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) + t1.start() + t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) + t2.start() + if input_data is not None: + p.stdin.write(input_data) + p.stdin.close() + + p.wait() + t1.join() + t2.join() + return p.returncode, stdout, stderr + + def sign_file(self, filename, signer, sign_password, keystore=None): + """ + Sign a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The absolute pathname of the file where the signature is + stored. + """ + cmd, sig_file = self.get_sign_command(filename, signer, sign_password, + keystore) + rc, stdout, stderr = self.run_command(cmd, + sign_password.encode('utf-8')) + if rc != 0: + raise DistlibException('sign command failed with error ' + 'code %s' % rc) + return sig_file + + def upload_file(self, metadata, filename, signer=None, sign_password=None, + filetype='sdist', pyversion='source', keystore=None): + """ + Upload a release file to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the file to be uploaded. + :param filename: The pathname of the file to be uploaded. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param filetype: The type of the file being uploaded. This is the + distutils command which produced that file, e.g. + ``sdist`` or ``bdist_wheel``. + :param pyversion: The version of Python which the release relates + to. For code compatible with any Python, this would + be ``source``, otherwise it would be e.g. ``3.2``. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.exists(filename): + raise DistlibException('not found: %s' % filename) + metadata.validate() + d = metadata.todict() + sig_file = None + if signer: + if not self.gpg: + logger.warning('no signing program available - not signed') + else: + sig_file = self.sign_file(filename, signer, sign_password, + keystore) + with open(filename, 'rb') as f: + file_data = f.read() + md5_digest = hashlib.md5(file_data).hexdigest() + sha256_digest = hashlib.sha256(file_data).hexdigest() + d.update({ + ':action': 'file_upload', + 'protcol_version': '1', + 'filetype': filetype, + 'pyversion': pyversion, + 'md5_digest': md5_digest, + 'sha256_digest': sha256_digest, + }) + files = [('content', os.path.basename(filename), file_data)] + if sig_file: + with open(sig_file, 'rb') as f: + sig_data = f.read() + files.append(('gpg_signature', os.path.basename(sig_file), + sig_data)) + shutil.rmtree(os.path.dirname(sig_file)) + request = self.encode_request(d.items(), files) + return self.send_request(request) + + def upload_documentation(self, metadata, doc_dir): + """ + Upload documentation to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the documentation to be + uploaded. + :param doc_dir: The pathname of the directory which contains the + documentation. This should be the directory that + contains the ``index.html`` for the documentation. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.isdir(doc_dir): + raise DistlibException('not a directory: %r' % doc_dir) + fn = os.path.join(doc_dir, 'index.html') + if not os.path.exists(fn): + raise DistlibException('not found: %r' % fn) + metadata.validate() + name, version = metadata.name, metadata.version + zip_data = zip_dir(doc_dir).getvalue() + fields = [(':action', 'doc_upload'), + ('name', name), ('version', version)] + files = [('content', name, zip_data)] + request = self.encode_request(fields, files) + return self.send_request(request) + + def get_verify_command(self, signature_filename, data_filename, + keystore=None): + """ + Return a suitable command for verifying a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The verifying command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + cmd.extend(['--verify', signature_filename, data_filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd + + def verify_signature(self, signature_filename, data_filename, + keystore=None): + """ + Verify a signature for a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: True if the signature was verified, else False. + """ + if not self.gpg: + raise DistlibException('verification unavailable because gpg ' + 'unavailable') + cmd = self.get_verify_command(signature_filename, data_filename, + keystore) + rc, stdout, stderr = self.run_command(cmd) + if rc not in (0, 1): + raise DistlibException('verify command failed with error ' + 'code %s' % rc) + return rc == 0 + + def download_file(self, url, destfile, digest=None, reporthook=None): + """ + This is a convenience method for downloading a file from an URL. + Normally, this will be a file from the index, though currently + no check is made for this (i.e. a file can be downloaded from + anywhere). + + The method is just like the :func:`urlretrieve` function in the + standard library, except that it allows digest computation to be + done during download and checking that the downloaded data + matched any expected value. + + :param url: The URL of the file to be downloaded (assumed to be + available via an HTTP GET request). + :param destfile: The pathname where the downloaded file is to be + saved. + :param digest: If specified, this must be a (hasher, value) + tuple, where hasher is the algorithm used (e.g. + ``'md5'``) and ``value`` is the expected value. + :param reporthook: The same as for :func:`urlretrieve` in the + standard library. + """ + if digest is None: + digester = None + logger.debug('No digest specified') + else: + if isinstance(digest, (list, tuple)): + hasher, digest = digest + else: + hasher = 'md5' + digester = getattr(hashlib, hasher)() + logger.debug('Digest specified: %s' % digest) + # The following code is equivalent to urlretrieve. + # We need to do it this way so that we can compute the + # digest of the file as we go. + with open(destfile, 'wb') as dfp: + # addinfourl is not a context manager on 2.x + # so we have to use try/finally + sfp = self.send_request(Request(url)) + try: + headers = sfp.info() + blocksize = 8192 + size = -1 + read = 0 + blocknum = 0 + if "content-length" in headers: + size = int(headers["Content-Length"]) + if reporthook: + reporthook(blocknum, blocksize, size) + while True: + block = sfp.read(blocksize) + if not block: + break + read += len(block) + dfp.write(block) + if digester: + digester.update(block) + blocknum += 1 + if reporthook: + reporthook(blocknum, blocksize, size) + finally: + sfp.close() + + # check that we got the whole file, if we can + if size >= 0 and read < size: + raise DistlibException( + 'retrieval incomplete: got only %d out of %d bytes' + % (read, size)) + # if we have a digest, it must match. + if digester: + actual = digester.hexdigest() + if digest != actual: + raise DistlibException('%s digest mismatch for %s: expected ' + '%s, got %s' % (hasher, destfile, + digest, actual)) + logger.debug('Digest verified: %s', digest) + + def send_request(self, req): + """ + Send a standard library :class:`Request` to PyPI and return its + response. + + :param req: The request to send. + :return: The HTTP response from PyPI (a standard library HTTPResponse). + """ + handlers = [] + if self.password_handler: + handlers.append(self.password_handler) + if self.ssl_verifier: + handlers.append(self.ssl_verifier) + opener = build_opener(*handlers) + return opener.open(req) + + def encode_request(self, fields, files): + """ + Encode fields and files for posting to an HTTP server. + + :param fields: The fields to send as a list of (fieldname, value) + tuples. + :param files: The files to send as a list of (fieldname, filename, + file_bytes) tuple. + """ + # Adapted from packaging, which in turn was adapted from + # http://code.activestate.com/recipes/146306 + + parts = [] + boundary = self.boundary + for k, values in fields: + if not isinstance(values, (list, tuple)): + values = [values] + + for v in values: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"' % + k).encode('utf-8'), + b'', + v.encode('utf-8'))) + for key, filename, value in files: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"; filename="%s"' % + (key, filename)).encode('utf-8'), + b'', + value)) + + parts.extend((b'--' + boundary + b'--', b'')) + + body = b'\r\n'.join(parts) + ct = b'multipart/form-data; boundary=' + boundary + headers = { + 'Content-type': ct, + 'Content-length': str(len(body)) + } + return Request(self.url, body, headers) + + def search(self, terms, operator=None): + if isinstance(terms, string_types): + terms = {'name': terms} + if self.rpc_proxy is None: + self.rpc_proxy = ServerProxy(self.url, timeout=3.0) + return self.rpc_proxy.search(terms, operator or 'and') diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/locators.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/locators.py new file mode 100644 index 0000000..ef584d5 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/locators.py @@ -0,0 +1,1264 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# + +import gzip +from io import BytesIO +import json +import logging +import os +import posixpath +import re +try: + import threading +except ImportError: + import dummy_threading as threading +import zlib + +from . import DistlibException +from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, + queue, quote, unescape, string_types, build_opener, + HTTPRedirectHandler as BaseRedirectHandler, + Request, HTTPError, URLError) +from .database import Distribution, DistributionPath, make_dist +from .metadata import Metadata +from .util import (cached_property, parse_credentials, ensure_slash, + split_filename, get_project_data, parse_requirement, + parse_name_and_version, ServerProxy) +from .version import get_scheme, UnsupportedVersionError +from .wheel import Wheel, is_compatible + +logger = logging.getLogger(__name__) + +HASHER_HASH = re.compile('^(\w+)=([a-f0-9]+)') +CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) +HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') +DEFAULT_INDEX = 'http://python.org/pypi' + +def get_all_distribution_names(url=None): + """ + Return all distribution names known by an index. + :param url: The URL of the index. + :return: A list of all known distribution names. + """ + if url is None: + url = DEFAULT_INDEX + client = ServerProxy(url, timeout=3.0) + return client.list_packages() + +class RedirectHandler(BaseRedirectHandler): + """ + A class to work around a bug in some Python 3.2.x releases. + """ + # There's a bug in the base version for some 3.2.x + # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header + # returns e.g. /abc, it bails because it says the scheme '' + # is bogus, when actually it should use the request's + # URL for the scheme. See Python issue #13696. + def http_error_302(self, req, fp, code, msg, headers): + # Some servers (incorrectly) return multiple Location headers + # (so probably same goes for URI). Use first header. + newurl = None + for key in ('location', 'uri'): + if key in headers: + newurl = headers[key] + break + if newurl is None: + return + urlparts = urlparse(newurl) + if urlparts.scheme == '': + newurl = urljoin(req.get_full_url(), newurl) + if hasattr(headers, 'replace_header'): + headers.replace_header(key, newurl) + else: + headers[key] = newurl + return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, + headers) + + http_error_301 = http_error_303 = http_error_307 = http_error_302 + +class Locator(object): + """ + A base class for locators - things that locate distributions. + """ + source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') + binary_extensions = ('.egg', '.exe', '.whl') + excluded_extensions = ('.pdf',) + + # A list of tags indicating which wheels you want to match. The default + # value of None matches against the tags compatible with the running + # Python. If you want to match other values, set wheel_tags on a locator + # instance to a list of tuples (pyver, abi, arch) which you want to match. + wheel_tags = None + + downloadable_extensions = source_extensions + ('.whl',) + + def __init__(self, scheme='default'): + """ + Initialise an instance. + :param scheme: Because locators look for most recent versions, they + need to know the version scheme to use. This specifies + the current PEP-recommended scheme - use ``'legacy'`` + if you need to support existing distributions on PyPI. + """ + self._cache = {} + self.scheme = scheme + # Because of bugs in some of the handlers on some of the platforms, + # we use our own opener rather than just using urlopen. + self.opener = build_opener(RedirectHandler()) + # If get_project() is called from locate(), the matcher instance + # is set from the requirement passed to locate(). See issue #18 for + # why this can be useful to know. + self.matcher = None + + def clear_cache(self): + self._cache.clear() + + def _get_scheme(self): + return self._scheme + + def _set_scheme(self, value): + self._scheme = value + + scheme = property(_get_scheme, _set_scheme) + + def _get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This should be implemented in subclasses. + + If called from a locate() request, self.matcher will be set to a + matcher for the requirement to satisfy, otherwise it will be None. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This calls _get_project to do all the work, and just implements a caching layer on top. + """ + if self._cache is None: + result = self._get_project(name) + elif name in self._cache: + result = self._cache[name] + else: + result = self._get_project(name) + self._cache[name] = result + return result + + def score_url(self, url): + """ + Give an url a score which can be used to choose preferred URLs + for a given project release. + """ + t = urlparse(url) + basename = posixpath.basename(t.path) + compatible = True + is_wheel = basename.endswith('.whl') + if is_wheel: + compatible = is_compatible(Wheel(basename), self.wheel_tags) + return (t.scheme != 'https', 'pypi.python.org' in t.netloc, + is_wheel, compatible, basename) + + def prefer_url(self, url1, url2): + """ + Choose one of two URLs where both are candidates for distribution + archives for the same version of a distribution (for example, + .tar.gz vs. zip). + + The current implementation favours https:// URLs over http://, archives + from PyPI over those from other locations, wheel compatibility (if a + wheel) and then the archive name. + """ + result = url2 + if url1: + s1 = self.score_url(url1) + s2 = self.score_url(url2) + if s1 > s2: + result = url1 + if result != url2: + logger.debug('Not replacing %r with %r', url1, url2) + else: + logger.debug('Replacing %r with %r', url1, url2) + return result + + def split_filename(self, filename, project_name): + """ + Attempt to split a filename in project name, version and Python version. + """ + return split_filename(filename, project_name) + + def convert_url_to_download_info(self, url, project_name): + """ + See if a URL is a candidate for a download URL for a project (the URL + has typically been scraped from an HTML page). + + If it is, a dictionary is returned with keys "name", "version", + "filename" and "url"; otherwise, None is returned. + """ + def same_project(name1, name2): + name1, name2 = name1.lower(), name2.lower() + if name1 == name2: + result = True + else: + # distribute replaces '-' by '_' in project names, so it + # can tell where the version starts in a filename. + result = name1.replace('_', '-') == name2.replace('_', '-') + return result + + result = None + scheme, netloc, path, params, query, frag = urlparse(url) + if frag.lower().startswith('egg='): + logger.debug('%s: version hint in fragment: %r', + project_name, frag) + m = HASHER_HASH.match(frag) + if m: + algo, digest = m.groups() + else: + algo, digest = None, None + origpath = path + if path and path[-1] == '/': + path = path[:-1] + if path.endswith('.whl'): + try: + wheel = Wheel(path) + if is_compatible(wheel, self.wheel_tags): + if project_name is None: + include = True + else: + include = same_project(wheel.name, project_name) + if include: + result = { + 'name': wheel.name, + 'version': wheel.version, + 'filename': wheel.filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + 'python-version': ', '.join( + ['.'.join(list(v[2:])) for v in wheel.pyver]), + } + except Exception as e: + logger.warning('invalid path for wheel: %s', path) + elif path.endswith(self.downloadable_extensions): + path = filename = posixpath.basename(path) + for ext in self.downloadable_extensions: + if path.endswith(ext): + path = path[:-len(ext)] + t = self.split_filename(path, project_name) + if not t: + logger.debug('No match for project/version: %s', path) + else: + name, version, pyver = t + if not project_name or same_project(project_name, name): + result = { + 'name': name, + 'version': version, + 'filename': filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + #'packagetype': 'sdist', + } + if pyver: + result['python-version'] = pyver + break + if result and algo: + result['%s_digest' % algo] = digest + return result + + def _get_digest(self, info): + """ + Get a digest from a dictionary by looking at keys of the form + 'algo_digest'. + + Returns a 2-tuple (algo, digest) if found, else None. Currently + looks only for SHA256, then MD5. + """ + result = None + for algo in ('sha256', 'md5'): + key = '%s_digest' % algo + if key in info: + result = (algo, info[key]) + break + return result + + def _update_version_data(self, result, info): + """ + Update a result dictionary (the final result from _get_project) with a + dictionary for a specific version, which typically holds information + gleaned from a filename or URL for an archive for the distribution. + """ + name = info.pop('name') + version = info.pop('version') + if version in result: + dist = result[version] + md = dist.metadata + else: + dist = make_dist(name, version, scheme=self.scheme) + md = dist.metadata + dist.digest = digest = self._get_digest(info) + url = info['url'] + result['digests'][url] = digest + if md.source_url != info['url']: + md.source_url = self.prefer_url(md.source_url, url) + result['urls'].setdefault(version, set()).add(url) + dist.locator = self + result[version] = dist + + def locate(self, requirement, prereleases=False): + """ + Find the most recent distribution which matches the given + requirement. + + :param requirement: A requirement of the form 'foo (1.0)' or perhaps + 'foo (>= 1.0, < 2.0, != 1.3)' + :param prereleases: If ``True``, allow pre-release versions + to be located. Otherwise, pre-release versions + are not returned. + :return: A :class:`Distribution` instance, or ``None`` if no such + distribution could be located. + """ + result = None + r = parse_requirement(requirement) + if r is None: + raise DistlibException('Not a valid requirement: %r' % requirement) + scheme = get_scheme(self.scheme) + self.matcher = matcher = scheme.matcher(r.requirement) + logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) + versions = self.get_project(r.name) + if len(versions) > 2: # urls and digests keys are present + # sometimes, versions are invalid + slist = [] + vcls = matcher.version_class + for k in versions: + if k in ('urls', 'digests'): + continue + try: + if not matcher.match(k): + logger.debug('%s did not match %r', matcher, k) + else: + if prereleases or not vcls(k).is_prerelease: + slist.append(k) + else: + logger.debug('skipping pre-release ' + 'version %s of %s', k, matcher.name) + except Exception: + logger.warning('error matching %s with %r', matcher, k) + pass # slist.append(k) + if len(slist) > 1: + slist = sorted(slist, key=scheme.key) + if slist: + logger.debug('sorted list: %s', slist) + version = slist[-1] + result = versions[version] + if result: + if r.extras: + result.extras = r.extras + result.download_urls = versions.get('urls', {}).get(version, set()) + d = {} + sd = versions.get('digests', {}) + for url in result.download_urls: + if url in sd: + d[url] = sd[url] + result.digests = d + self.matcher = None + return result + + +class PyPIRPCLocator(Locator): + """ + This locator uses XML-RPC to locate distributions. It therefore + cannot be used with simple mirrors (that only mirror file content). + """ + def __init__(self, url, **kwargs): + """ + Initialise an instance. + + :param url: The URL to use for XML-RPC. + :param kwargs: Passed to the superclass constructor. + """ + super(PyPIRPCLocator, self).__init__(**kwargs) + self.base_url = url + self.client = ServerProxy(url, timeout=3.0) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + return set(self.client.list_packages()) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + versions = self.client.package_releases(name, True) + for v in versions: + urls = self.client.release_urls(name, v) + data = self.client.release_data(name, v) + metadata = Metadata(scheme=self.scheme) + metadata.name = data['name'] + metadata.version = data['version'] + metadata.license = data.get('license') + metadata.keywords = data.get('keywords', []) + metadata.summary = data.get('summary') + dist = Distribution(metadata) + if urls: + info = urls[0] + metadata.source_url = info['url'] + dist.digest = self._get_digest(info) + dist.locator = self + result[v] = dist + for info in urls: + url = info['url'] + digest = self._get_digest(info) + result['urls'].setdefault(v, set()).add(url) + result['digests'][url] = digest + return result + +class PyPIJSONLocator(Locator): + """ + This locator uses PyPI's JSON interface. It's very limited in functionality + and probably not worth using. + """ + def __init__(self, url, **kwargs): + super(PyPIJSONLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + url = urljoin(self.base_url, '%s/json' % quote(name)) + try: + resp = self.opener.open(url) + data = resp.read().decode() # for now + d = json.loads(data) + md = Metadata(scheme=self.scheme) + data = d['info'] + md.name = data['name'] + md.version = data['version'] + md.license = data.get('license') + md.keywords = data.get('keywords', []) + md.summary = data.get('summary') + dist = Distribution(md) + dist.locator = self + urls = d['urls'] + result[md.version] = dist + for info in d['urls']: + url = info['url'] + dist.download_urls.add(url) + dist.digests[url] = self._get_digest(info) + result['urls'].setdefault(md.version, set()).add(url) + result['digests'][url] = self._get_digest(info) + # Now get other releases + for version, infos in d['releases'].items(): + if version == md.version: + continue # already done + omd = Metadata(scheme=self.scheme) + omd.name = md.name + omd.version = version + odist = Distribution(omd) + odist.locator = self + result[version] = odist + for info in infos: + url = info['url'] + odist.download_urls.add(url) + odist.digests[url] = self._get_digest(info) + result['urls'].setdefault(version, set()).add(url) + result['digests'][url] = self._get_digest(info) +# for info in urls: +# md.source_url = info['url'] +# dist.digest = self._get_digest(info) +# dist.locator = self +# for info in urls: +# url = info['url'] +# result['urls'].setdefault(md.version, set()).add(url) +# result['digests'][url] = self._get_digest(info) + except Exception as e: + logger.exception('JSON fetch failed: %s', e) + return result + + +class Page(object): + """ + This class represents a scraped HTML page. + """ + # The following slightly hairy-looking regex just looks for the contents of + # an anchor link, which has an attribute "href" either immediately preceded + # or immediately followed by a "rel" attribute. The attribute values can be + # declared with double quotes, single quotes or no quotes - which leads to + # the length of the expression. + _href = re.compile(""" +(rel\s*=\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\s\n]*))\s+)? +href\s*=\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\s\n]*)) +(\s+rel\s*=\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\s\n]*)))? +""", re.I | re.S | re.X) + _base = re.compile(r"""]+)""", re.I | re.S) + + def __init__(self, data, url): + """ + Initialise an instance with the Unicode page contents and the URL they + came from. + """ + self.data = data + self.base_url = self.url = url + m = self._base.search(self.data) + if m: + self.base_url = m.group(1) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + @cached_property + def links(self): + """ + Return the URLs of all the links on a page together with information + about their "rel" attribute, for determining which ones to treat as + downloads and which ones to queue for further scraping. + """ + def clean(url): + "Tidy up an URL." + scheme, netloc, path, params, query, frag = urlparse(url) + return urlunparse((scheme, netloc, quote(path), + params, query, frag)) + + result = set() + for match in self._href.finditer(self.data): + d = match.groupdict('') + rel = (d['rel1'] or d['rel2'] or d['rel3'] or + d['rel4'] or d['rel5'] or d['rel6']) + url = d['url1'] or d['url2'] or d['url3'] + url = urljoin(self.base_url, url) + url = unescape(url) + url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) + result.add((url, rel)) + # We sort the result, hoping to bring the most recent versions + # to the front + result = sorted(result, key=lambda t: t[0], reverse=True) + return result + + +class SimpleScrapingLocator(Locator): + """ + A locator which scrapes HTML pages to locate downloads for a distribution. + This runs multiple threads to do the I/O; performance is at least as good + as pip's PackageFinder, which works in an analogous fashion. + """ + + # These are used to deal with various Content-Encoding schemes. + decoders = { + 'deflate': zlib.decompress, + 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(d)).read(), + 'none': lambda b: b, + } + + def __init__(self, url, timeout=None, num_workers=10, **kwargs): + """ + Initialise an instance. + :param url: The root URL to use for scraping. + :param timeout: The timeout, in seconds, to be applied to requests. + This defaults to ``None`` (no timeout specified). + :param num_workers: The number of worker threads you want to do I/O, + This defaults to 10. + :param kwargs: Passed to the superclass. + """ + super(SimpleScrapingLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + self.timeout = timeout + self._page_cache = {} + self._seen = set() + self._to_fetch = queue.Queue() + self._bad_hosts = set() + self.skip_externals = False + self.num_workers = num_workers + self._lock = threading.RLock() + # See issue #45: we need to be resilient when the locator is used + # in a thread, e.g. with concurrent.futures. We can't use self._lock + # as it is for coordinating our internal threads - the ones created + # in _prepare_threads. + self._gplock = threading.RLock() + + def _prepare_threads(self): + """ + Threads are created only when get_project is called, and terminate + before it returns. They are there primarily to parallelise I/O (i.e. + fetching web pages). + """ + self._threads = [] + for i in range(self.num_workers): + t = threading.Thread(target=self._fetch) + t.setDaemon(True) + t.start() + self._threads.append(t) + + def _wait_threads(self): + """ + Tell all the threads to terminate (by sending a sentinel value) and + wait for them to do so. + """ + # Note that you need two loops, since you can't say which + # thread will get each sentinel + for t in self._threads: + self._to_fetch.put(None) # sentinel + for t in self._threads: + t.join() + self._threads = [] + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + with self._gplock: + self.result = result + self.project_name = name + url = urljoin(self.base_url, '%s/' % quote(name)) + self._seen.clear() + self._page_cache.clear() + self._prepare_threads() + try: + logger.debug('Queueing %s', url) + self._to_fetch.put(url) + self._to_fetch.join() + finally: + self._wait_threads() + del self.result + return result + + platform_dependent = re.compile(r'\b(linux-(i\d86|x86_64|arm\w+)|' + r'win(32|-amd64)|macosx-?\d+)\b', re.I) + + def _is_platform_dependent(self, url): + """ + Does an URL refer to a platform-specific download? + """ + return self.platform_dependent.search(url) + + def _process_download(self, url): + """ + See if an URL is a suitable download for a project. + + If it is, register information in the result dictionary (for + _get_project) about the specific version it's for. + + Note that the return value isn't actually used other than as a boolean + value. + """ + if self._is_platform_dependent(url): + info = None + else: + info = self.convert_url_to_download_info(url, self.project_name) + logger.debug('process_download: %s -> %s', url, info) + if info: + with self._lock: # needed because self.result is shared + self._update_version_data(self.result, info) + return info + + def _should_queue(self, link, referrer, rel): + """ + Determine whether a link URL from a referring page and with a + particular "rel" attribute should be queued for scraping. + """ + scheme, netloc, path, _, _, _ = urlparse(link) + if path.endswith(self.source_extensions + self.binary_extensions + + self.excluded_extensions): + result = False + elif self.skip_externals and not link.startswith(self.base_url): + result = False + elif not referrer.startswith(self.base_url): + result = False + elif rel not in ('homepage', 'download'): + result = False + elif scheme not in ('http', 'https', 'ftp'): + result = False + elif self._is_platform_dependent(link): + result = False + else: + host = netloc.split(':', 1)[0] + if host.lower() == 'localhost': + result = False + else: + result = True + logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, + referrer, result) + return result + + def _fetch(self): + """ + Get a URL to fetch from the work queue, get the HTML page, examine its + links for download candidates and candidates for further scraping. + + This is a handy method to run in a thread. + """ + while True: + url = self._to_fetch.get() + try: + if url: + page = self.get_page(url) + if page is None: # e.g. after an error + continue + for link, rel in page.links: + if link not in self._seen: + self._seen.add(link) + if (not self._process_download(link) and + self._should_queue(link, url, rel)): + logger.debug('Queueing %s from %s', link, url) + self._to_fetch.put(link) + finally: + # always do this, to avoid hangs :-) + self._to_fetch.task_done() + if not url: + #logger.debug('Sentinel seen, quitting.') + break + + def get_page(self, url): + """ + Get the HTML for an URL, possibly from an in-memory cache. + + XXX TODO Note: this cache is never actually cleared. It's assumed that + the data won't get stale over the lifetime of a locator instance (not + necessarily true for the default_locator). + """ + # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api + scheme, netloc, path, _, _, _ = urlparse(url) + if scheme == 'file' and os.path.isdir(url2pathname(path)): + url = urljoin(ensure_slash(url), 'index.html') + + if url in self._page_cache: + result = self._page_cache[url] + logger.debug('Returning %s from cache: %s', url, result) + else: + host = netloc.split(':', 1)[0] + result = None + if host in self._bad_hosts: + logger.debug('Skipping %s due to bad host %s', url, host) + else: + req = Request(url, headers={'Accept-encoding': 'identity'}) + try: + logger.debug('Fetching %s', url) + resp = self.opener.open(req, timeout=self.timeout) + logger.debug('Fetched %s', url) + headers = resp.info() + content_type = headers.get('Content-Type', '') + if HTML_CONTENT_TYPE.match(content_type): + final_url = resp.geturl() + data = resp.read() + encoding = headers.get('Content-Encoding') + if encoding: + decoder = self.decoders[encoding] # fail if not found + data = decoder(data) + encoding = 'utf-8' + m = CHARSET.search(content_type) + if m: + encoding = m.group(1) + try: + data = data.decode(encoding) + except UnicodeError: + data = data.decode('latin-1') # fallback + result = Page(data, final_url) + self._page_cache[final_url] = result + except HTTPError as e: + if e.code != 404: + logger.exception('Fetch failed: %s: %s', url, e) + except URLError as e: + logger.exception('Fetch failed: %s: %s', url, e) + with self._lock: + self._bad_hosts.add(host) + except Exception as e: + logger.exception('Fetch failed: %s: %s', url, e) + finally: + self._page_cache[url] = result # even if None (failure) + return result + + _distname_re = re.compile(']*>([^<]+)<') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + page = self.get_page(self.base_url) + if not page: + raise DistlibException('Unable to get %s' % self.base_url) + for match in self._distname_re.finditer(page.data): + result.add(match.group(1)) + return result + +class DirectoryLocator(Locator): + """ + This class locates distributions in a directory tree. + """ + + def __init__(self, path, **kwargs): + """ + Initialise an instance. + :param path: The root of the directory tree to search. + :param kwargs: Passed to the superclass constructor, + except for: + * recursive - if True (the default), subdirectories are + recursed into. If False, only the top-level directory + is searched, + """ + self.recursive = kwargs.pop('recursive', True) + super(DirectoryLocator, self).__init__(**kwargs) + path = os.path.abspath(path) + if not os.path.isdir(path): + raise DistlibException('Not a directory: %r' % path) + self.base_dir = path + + def should_include(self, filename, parent): + """ + Should a filename be considered as a candidate for a distribution + archive? As well as the filename, the directory which contains it + is provided, though not used by the current implementation. + """ + return filename.endswith(self.downloadable_extensions) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, name) + if info: + self._update_version_data(result, info) + if not self.recursive: + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, None) + if info: + result.add(info['name']) + if not self.recursive: + break + return result + +class JSONLocator(Locator): + """ + This locator uses special extended metadata (not available on PyPI) and is + the basis of performant dependency resolution in distlib. Other locators + require archive downloads before dependencies can be determined! As you + might imagine, that can be slow. + """ + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + data = get_project_data(name) + if data: + for info in data.get('files', []): + if info['ptype'] != 'sdist' or info['pyversion'] != 'source': + continue + # We don't store summary in project metadata as it makes + # the data bigger for no benefit during dependency + # resolution + dist = make_dist(data['name'], info['version'], + summary=data.get('summary', + 'Placeholder for summary'), + scheme=self.scheme) + md = dist.metadata + md.source_url = info['url'] + # TODO SHA256 digest + if 'digest' in info and info['digest']: + dist.digest = ('md5', info['digest']) + md.dependencies = info.get('requirements', {}) + dist.exports = info.get('exports', {}) + result[dist.version] = dist + result['urls'].setdefault(dist.version, set()).add(info['url']) + return result + +class DistPathLocator(Locator): + """ + This locator finds installed distributions in a path. It can be useful for + adding to an :class:`AggregatingLocator`. + """ + def __init__(self, distpath, **kwargs): + """ + Initialise an instance. + + :param distpath: A :class:`DistributionPath` instance to search. + """ + super(DistPathLocator, self).__init__(**kwargs) + assert isinstance(distpath, DistributionPath) + self.distpath = distpath + + def _get_project(self, name): + dist = self.distpath.get_distribution(name) + if dist is None: + result = {'urls': {}, 'digests': {}} + else: + result = { + dist.version: dist, + 'urls': {dist.version: set([dist.source_url])}, + 'digests': {dist.version: set([None])} + } + return result + + +class AggregatingLocator(Locator): + """ + This class allows you to chain and/or merge a list of locators. + """ + def __init__(self, *locators, **kwargs): + """ + Initialise an instance. + + :param locators: The list of locators to search. + :param kwargs: Passed to the superclass constructor, + except for: + * merge - if False (the default), the first successful + search from any of the locators is returned. If True, + the results from all locators are merged (this can be + slow). + """ + self.merge = kwargs.pop('merge', False) + self.locators = locators + super(AggregatingLocator, self).__init__(**kwargs) + + def clear_cache(self): + super(AggregatingLocator, self).clear_cache() + for locator in self.locators: + locator.clear_cache() + + def _set_scheme(self, value): + self._scheme = value + for locator in self.locators: + locator.scheme = value + + scheme = property(Locator.scheme.fget, _set_scheme) + + def _get_project(self, name): + result = {} + for locator in self.locators: + d = locator.get_project(name) + if d: + if self.merge: + files = result.get('urls', {}) + digests = result.get('digests', {}) + # next line could overwrite result['urls'], result['digests'] + result.update(d) + df = result.get('urls') + if files and df: + for k, v in files.items(): + if k in df: + df[k] |= v + else: + df[k] = v + dd = result.get('digests') + if digests and dd: + dd.update(digests) + else: + # See issue #18. If any dists are found and we're looking + # for specific constraints, we only return something if + # a match is found. For example, if a DirectoryLocator + # returns just foo (1.0) while we're looking for + # foo (>= 2.0), we'll pretend there was nothing there so + # that subsequent locators can be queried. Otherwise we + # would just return foo (1.0) which would then lead to a + # failure to find foo (>= 2.0), because other locators + # weren't searched. Note that this only matters when + # merge=False. + if self.matcher is None: + found = True + else: + found = False + for k in d: + if self.matcher.match(k): + found = True + break + if found: + result = d + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for locator in self.locators: + try: + result |= locator.get_distribution_names() + except NotImplementedError: + pass + return result + + +# We use a legacy scheme simply because most of the dists on PyPI use legacy +# versions which don't conform to PEP 426 / PEP 440. +default_locator = AggregatingLocator( + JSONLocator(), + SimpleScrapingLocator('https://pypi.python.org/simple/', + timeout=3.0), + scheme='legacy') + +locate = default_locator.locate + +NAME_VERSION_RE = re.compile(r'(?P[\w-]+)\s*' + r'\(\s*(==\s*)?(?P[^)]+)\)$') + +class DependencyFinder(object): + """ + Locate dependencies for distributions. + """ + + def __init__(self, locator=None): + """ + Initialise an instance, using the specified locator + to locate distributions. + """ + self.locator = locator or default_locator + self.scheme = get_scheme(self.locator.scheme) + + def add_distribution(self, dist): + """ + Add a distribution to the finder. This will update internal information + about who provides what. + :param dist: The distribution to add. + """ + logger.debug('adding distribution %s', dist) + name = dist.key + self.dists_by_name[name] = dist + self.dists[(name, dist.version)] = dist + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + self.provided.setdefault(name, set()).add((version, dist)) + + def remove_distribution(self, dist): + """ + Remove a distribution from the finder. This will update internal + information about who provides what. + :param dist: The distribution to remove. + """ + logger.debug('removing distribution %s', dist) + name = dist.key + del self.dists_by_name[name] + del self.dists[(name, dist.version)] + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Remove from provided: %s, %s, %s', name, version, dist) + s = self.provided[name] + s.remove((version, dist)) + if not s: + del self.provided[name] + + def get_matcher(self, reqt): + """ + Get a version matcher for a requirement. + :param reqt: The requirement + :type reqt: str + :return: A version matcher (an instance of + :class:`distlib.version.Matcher`). + """ + try: + matcher = self.scheme.matcher(reqt) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + name = reqt.split()[0] + matcher = self.scheme.matcher(name) + return matcher + + def find_providers(self, reqt): + """ + Find the distributions which can fulfill a requirement. + + :param reqt: The requirement. + :type reqt: str + :return: A set of distribution which can fulfill the requirement. + """ + matcher = self.get_matcher(reqt) + name = matcher.key # case-insensitive + result = set() + provided = self.provided + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + result.add(provider) + break + return result + + def try_to_replace(self, provider, other, problems): + """ + Attempt to replace one provider with another. This is typically used + when resolving dependencies from multiple sources, e.g. A requires + (B >= 1.0) while C requires (B >= 1.1). + + For successful replacement, ``provider`` must meet all the requirements + which ``other`` fulfills. + + :param provider: The provider we are trying to replace with. + :param other: The provider we're trying to replace. + :param problems: If False is returned, this will contain what + problems prevented replacement. This is currently + a tuple of the literal string 'cantreplace', + ``provider``, ``other`` and the set of requirements + that ``provider`` couldn't fulfill. + :return: True if we can replace ``other`` with ``provider``, else + False. + """ + rlist = self.reqts[other] + unmatched = set() + for s in rlist: + matcher = self.get_matcher(s) + if not matcher.match(provider.version): + unmatched.add(s) + if unmatched: + # can't replace other with provider + problems.add(('cantreplace', provider, other, + frozenset(unmatched))) + result = False + else: + # can replace other with provider + self.remove_distribution(other) + del self.reqts[other] + for s in rlist: + self.reqts.setdefault(provider, set()).add(s) + self.add_distribution(provider) + result = True + return result + + def find(self, requirement, meta_extras=None, prereleases=False): + """ + Find a distribution and all distributions it depends on. + + :param requirement: The requirement specifying the distribution to + find, or a Distribution instance. + :param meta_extras: A list of meta extras such as :test:, :build: and + so on. + :param prereleases: If ``True``, allow pre-release versions to be + returned - otherwise, don't return prereleases + unless they're all that's available. + + Return a set of :class:`Distribution` instances and a set of + problems. + + The distributions returned should be such that they have the + :attr:`required` attribute set to ``True`` if they were + from the ``requirement`` passed to ``find()``, and they have the + :attr:`build_time_dependency` attribute set to ``True`` unless they + are post-installation dependencies of the ``requirement``. + + The problems should be a tuple consisting of the string + ``'unsatisfied'`` and the requirement which couldn't be satisfied + by any distribution known to the locator. + """ + + self.provided = {} + self.dists = {} + self.dists_by_name = {} + self.reqts = {} + + meta_extras = set(meta_extras or []) + if ':*:' in meta_extras: + meta_extras.remove(':*:') + # :meta: and :run: are implicitly included + meta_extras |= set([':test:', ':build:', ':dev:']) + + if isinstance(requirement, Distribution): + dist = odist = requirement + logger.debug('passed %s as requirement', odist) + else: + dist = odist = self.locator.locate(requirement, + prereleases=prereleases) + if dist is None: + raise DistlibException('Unable to locate %r' % requirement) + logger.debug('located %s', odist) + dist.requested = True + problems = set() + todo = set([dist]) + install_dists = set([odist]) + while todo: + dist = todo.pop() + name = dist.key # case-insensitive + if name not in self.dists_by_name: + self.add_distribution(dist) + else: + #import pdb; pdb.set_trace() + other = self.dists_by_name[name] + if other != dist: + self.try_to_replace(dist, other, problems) + + ireqts = dist.run_requires | dist.meta_requires + sreqts = dist.build_requires + ereqts = set() + if dist in install_dists: + for key in ('test', 'build', 'dev'): + e = ':%s:' % key + if e in meta_extras: + ereqts |= getattr(dist, '%s_requires' % key) + all_reqts = ireqts | sreqts | ereqts + for r in all_reqts: + providers = self.find_providers(r) + if not providers: + logger.debug('No providers found for %r', r) + provider = self.locator.locate(r, prereleases=prereleases) + # If no provider is found and we didn't consider + # prereleases, consider them now. + if provider is None and not prereleases: + provider = self.locator.locate(r, prereleases=True) + if provider is None: + logger.debug('Cannot satisfy %r', r) + problems.add(('unsatisfied', r)) + else: + n, v = provider.key, provider.version + if (n, v) not in self.dists: + todo.add(provider) + providers.add(provider) + if r in ireqts and dist in install_dists: + install_dists.add(provider) + logger.debug('Adding %s to install_dists', + provider.name_and_version) + for p in providers: + name = p.key + if name not in self.dists_by_name: + self.reqts.setdefault(p, set()).add(r) + else: + other = self.dists_by_name[name] + if other != p: + # see if other can be replaced by p + self.try_to_replace(p, other, problems) + + dists = set(self.dists.values()) + for dist in dists: + dist.build_time_dependency = dist not in install_dists + if dist.build_time_dependency: + logger.debug('%s is a build-time dependency only.', + dist.name_and_version) + logger.debug('find done for %s', odist) + return dists, problems diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/manifest.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/manifest.py new file mode 100644 index 0000000..21cff45 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/manifest.py @@ -0,0 +1,367 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2013 Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Class representing the list of files in a distribution. + +Equivalent to distutils.filelist, but fixes some problems. +""" +import fnmatch +import logging +import os +import re + +from . import DistlibException +from .compat import fsdecode +from .util import convert_path + + +__all__ = ['Manifest'] + +logger = logging.getLogger(__name__) + +# a \ followed by some spaces + EOL +_COLLAPSE_PATTERN = re.compile('\\\w*\n', re.M) +_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) + + +class Manifest(object): + """A list of files built by on exploring the filesystem and filtered by + applying various patterns to what we find there. + """ + + def __init__(self, base=None): + """ + Initialise an instance. + + :param base: The base directory to explore under. + """ + self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) + self.prefix = self.base + os.sep + self.allfiles = None + self.files = set() + + # + # Public API + # + + def findall(self): + """Find all files under the base and set ``allfiles`` to the absolute + pathnames of files found. + """ + from stat import S_ISREG, S_ISDIR, S_ISLNK + + self.allfiles = allfiles = [] + root = self.base + stack = [root] + pop = stack.pop + push = stack.append + + while stack: + root = pop() + names = os.listdir(root) + + for name in names: + fullname = os.path.join(root, name) + + # Avoid excess stat calls -- just one will do, thank you! + stat = os.stat(fullname) + mode = stat.st_mode + if S_ISREG(mode): + allfiles.append(fsdecode(fullname)) + elif S_ISDIR(mode) and not S_ISLNK(mode): + push(fullname) + + def add(self, item): + """ + Add a file to the manifest. + + :param item: The pathname to add. This can be relative to the base. + """ + if not item.startswith(self.prefix): + item = os.path.join(self.base, item) + self.files.add(os.path.normpath(item)) + + def add_many(self, items): + """ + Add a list of files to the manifest. + + :param items: The pathnames to add. These can be relative to the base. + """ + for item in items: + self.add(item) + + def sorted(self, wantdirs=False): + """ + Return sorted files in directory order + """ + + def add_dir(dirs, d): + dirs.add(d) + logger.debug('add_dir added %s', d) + if d != self.base: + parent, _ = os.path.split(d) + assert parent not in ('', '/') + add_dir(dirs, parent) + + result = set(self.files) # make a copy! + if wantdirs: + dirs = set() + for f in result: + add_dir(dirs, os.path.dirname(f)) + result |= dirs + return [os.path.join(*path_tuple) for path_tuple in + sorted(os.path.split(path) for path in result)] + + def clear(self): + """Clear all collected files.""" + self.files = set() + self.allfiles = [] + + def process_directive(self, directive): + """ + Process a directive which either adds some files from ``allfiles`` to + ``files``, or removes some files from ``files``. + + :param directive: The directive to process. This should be in a format + compatible with distutils ``MANIFEST.in`` files: + + http://docs.python.org/distutils/sourcedist.html#commands + """ + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dirpattern). + action, patterns, thedir, dirpattern = self._parse_directive(directive) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=True): + logger.warning('no files found matching %r', pattern) + + elif action == 'exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=True) + #if not found: + # logger.warning('no previously-included files ' + # 'found matching %r', pattern) + + elif action == 'global-include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=False): + logger.warning('no files found matching %r ' + 'anywhere in distribution', pattern) + + elif action == 'global-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=False) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found anywhere in ' + # 'distribution', pattern) + + elif action == 'recursive-include': + for pattern in patterns: + if not self._include_pattern(pattern, prefix=thedir): + logger.warning('no files found matching %r ' + 'under directory %r', pattern, thedir) + + elif action == 'recursive-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, prefix=thedir) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found under directory %r', + # pattern, thedir) + + elif action == 'graft': + if not self._include_pattern(None, prefix=dirpattern): + logger.warning('no directories found matching %r', + dirpattern) + + elif action == 'prune': + if not self._exclude_pattern(None, prefix=dirpattern): + logger.warning('no previously-included directories found ' + 'matching %r', dirpattern) + else: # pragma: no cover + # This should never happen, as it should be caught in + # _parse_template_line + raise DistlibException( + 'invalid action %r' % action) + + # + # Private API + # + + def _parse_directive(self, directive): + """ + Validate a directive. + :param directive: The directive to validate. + :return: A tuple of action, patterns, thedir, dir_patterns + """ + words = directive.split() + if len(words) == 1 and words[0] not in ('include', 'exclude', + 'global-include', + 'global-exclude', + 'recursive-include', + 'recursive-exclude', + 'graft', 'prune'): + # no action given, let's use the default 'include' + words.insert(0, 'include') + + action = words[0] + patterns = thedir = dir_pattern = None + + if action in ('include', 'exclude', + 'global-include', 'global-exclude'): + if len(words) < 2: + raise DistlibException( + '%r expects ...' % action) + + patterns = [convert_path(word) for word in words[1:]] + + elif action in ('recursive-include', 'recursive-exclude'): + if len(words) < 3: + raise DistlibException( + '%r expects ...' % action) + + thedir = convert_path(words[1]) + patterns = [convert_path(word) for word in words[2:]] + + elif action in ('graft', 'prune'): + if len(words) != 2: + raise DistlibException( + '%r expects a single ' % action) + + dir_pattern = convert_path(words[1]) + + else: + raise DistlibException('unknown action %r' % action) + + return action, patterns, thedir, dir_pattern + + def _include_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Select strings (presumably filenames) from 'self.files' that + match 'pattern', a Unix-style wildcard (glob) pattern. + + Patterns are not quite the same as implemented by the 'fnmatch' + module: '*' and '?' match non-special characters, where "special" + is platform-dependent: slash on Unix; colon, slash, and backslash on + DOS/Windows; and colon on Mac OS. + + If 'anchor' is true (the default), then the pattern match is more + stringent: "*.py" will match "foo.py" but not "foo/bar.py". If + 'anchor' is false, both of these will match. + + If 'prefix' is supplied, then only filenames starting with 'prefix' + (itself a pattern) and ending with 'pattern', with anything in between + them, will match. 'anchor' is ignored in this case. + + If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and + 'pattern' is assumed to be either a string containing a regex or a + regex object -- no translation is done, the regex is just compiled + and used as-is. + + Selected strings will be added to self.files. + + Return True if files are found. + """ + # XXX docstring lying about what the special chars are? + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + + # delayed loading of allfiles list + if self.allfiles is None: + self.findall() + + for name in self.allfiles: + if pattern_re.search(name): + self.files.add(name) + found = True + return found + + def _exclude_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Remove strings (presumably filenames) from 'files' that match + 'pattern'. + + Other parameters are the same as for 'include_pattern()', above. + The list 'self.files' is modified in place. Return True if files are + found. + + This API is public to allow e.g. exclusion of SCM subdirs, e.g. when + packaging source distributions + """ + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + for f in list(self.files): + if pattern_re.search(f): + self.files.remove(f) + found = True + return found + + def _translate_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Translate a shell-like wildcard pattern to a compiled regular + expression. + + Return the compiled regex. If 'is_regex' true, + then 'pattern' is directly compiled to a regex (if it's a string) + or just returned as-is (assumes it's a regex object). + """ + if is_regex: + if isinstance(pattern, str): + return re.compile(pattern) + else: + return pattern + + if pattern: + pattern_re = self._glob_to_re(pattern) + else: + pattern_re = '' + + base = re.escape(os.path.join(self.base, '')) + if prefix is not None: + # ditch end of pattern character + empty_pattern = self._glob_to_re('') + prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] + sep = os.sep + if os.sep == '\\': + sep = r'\\' + pattern_re = '^' + base + sep.join((prefix_re, + '.*' + pattern_re)) + else: # no prefix -- respect anchor flag + if anchor: + pattern_re = '^' + base + pattern_re + + return re.compile(pattern_re) + + def _glob_to_re(self, pattern): + """Translate a shell-like glob pattern to a regular expression. + + Return a string containing the regex. Differs from + 'fnmatch.translate()' in that '*' does not match "special characters" + (which are platform-specific). + """ + pattern_re = fnmatch.translate(pattern) + + # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which + # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, + # and by extension they shouldn't match such "special characters" under + # any OS. So change all non-escaped dots in the RE to match any + # character except the special characters (currently: just os.sep). + sep = os.sep + if os.sep == '\\': + # we're using a regex to manipulate a regex, so we need + # to escape the backslash twice + sep = r'\\\\' + escaped = r'\1[^%s]' % sep + pattern_re = re.sub(r'((? y, + 'gte': lambda x, y: x >= y, + 'in': lambda x, y: x in y, + 'lt': lambda x, y: x < y, + 'lte': lambda x, y: x <= y, + 'not': lambda x: not x, + 'noteq': lambda x, y: x != y, + 'notin': lambda x, y: x not in y, + } + + allowed_values = { + 'sys_platform': sys.platform, + 'python_version': '%s.%s' % sys.version_info[:2], + # parsing sys.platform is not reliable, but there is no other + # way to get e.g. 2.7.2+, and the PEP is defined with sys.version + 'python_full_version': sys.version.split(' ', 1)[0], + 'os_name': os.name, + 'platform_in_venv': str(in_venv()), + 'platform_release': platform.release(), + 'platform_version': platform.version(), + 'platform_machine': platform.machine(), + 'platform_python_implementation': python_implementation(), + } + + def __init__(self, context=None): + """ + Initialise an instance. + + :param context: If specified, names are looked up in this mapping. + """ + self.context = context or {} + self.source = None + + def get_fragment(self, offset): + """ + Get the part of the source which is causing a problem. + """ + fragment_len = 10 + s = '%r' % (self.source[offset:offset + fragment_len]) + if offset + fragment_len < len(self.source): + s += '...' + return s + + def get_handler(self, node_type): + """ + Get a handler for the specified AST node type. + """ + return getattr(self, 'do_%s' % node_type, None) + + def evaluate(self, node, filename=None): + """ + Evaluate a source string or node, using ``filename`` when + displaying errors. + """ + if isinstance(node, string_types): + self.source = node + kwargs = {'mode': 'eval'} + if filename: + kwargs['filename'] = filename + try: + node = ast.parse(node, **kwargs) + except SyntaxError as e: + s = self.get_fragment(e.offset) + raise SyntaxError('syntax error %s' % s) + node_type = node.__class__.__name__.lower() + handler = self.get_handler(node_type) + if handler is None: + if self.source is None: + s = '(source not available)' + else: + s = self.get_fragment(node.col_offset) + raise SyntaxError("don't know how to evaluate %r %s" % ( + node_type, s)) + return handler(node) + + def get_attr_key(self, node): + assert isinstance(node, ast.Attribute), 'attribute node expected' + return '%s.%s' % (node.value.id, node.attr) + + def do_attribute(self, node): + if not isinstance(node.value, ast.Name): + valid = False + else: + key = self.get_attr_key(node) + valid = key in self.context or key in self.allowed_values + if not valid: + raise SyntaxError('invalid expression: %s' % key) + if key in self.context: + result = self.context[key] + else: + result = self.allowed_values[key] + return result + + def do_boolop(self, node): + result = self.evaluate(node.values[0]) + is_or = node.op.__class__ is ast.Or + is_and = node.op.__class__ is ast.And + assert is_or or is_and + if (is_and and result) or (is_or and not result): + for n in node.values[1:]: + result = self.evaluate(n) + if (is_or and result) or (is_and and not result): + break + return result + + def do_compare(self, node): + def sanity_check(lhsnode, rhsnode): + valid = True + if isinstance(lhsnode, ast.Str) and isinstance(rhsnode, ast.Str): + valid = False + #elif (isinstance(lhsnode, ast.Attribute) + # and isinstance(rhsnode, ast.Attribute)): + # klhs = self.get_attr_key(lhsnode) + # krhs = self.get_attr_key(rhsnode) + # valid = klhs != krhs + if not valid: + s = self.get_fragment(node.col_offset) + raise SyntaxError('Invalid comparison: %s' % s) + + lhsnode = node.left + lhs = self.evaluate(lhsnode) + result = True + for op, rhsnode in zip(node.ops, node.comparators): + sanity_check(lhsnode, rhsnode) + op = op.__class__.__name__.lower() + if op not in self.operators: + raise SyntaxError('unsupported operation: %r' % op) + rhs = self.evaluate(rhsnode) + result = self.operators[op](lhs, rhs) + if not result: + break + lhs = rhs + lhsnode = rhsnode + return result + + def do_expression(self, node): + return self.evaluate(node.body) + + def do_name(self, node): + valid = False + if node.id in self.context: + valid = True + result = self.context[node.id] + elif node.id in self.allowed_values: + valid = True + result = self.allowed_values[node.id] + if not valid: + raise SyntaxError('invalid expression: %s' % node.id) + return result + + def do_str(self, node): + return node.s + + +def interpret(marker, execution_context=None): + """ + Interpret a marker and return a result depending on environment. + + :param marker: The marker to interpret. + :type marker: str + :param execution_context: The context used for name lookup. + :type execution_context: mapping + """ + return Evaluator(execution_context).evaluate(marker.strip()) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/metadata.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/metadata.py new file mode 100644 index 0000000..55bd75f --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/metadata.py @@ -0,0 +1,1058 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Implementation of the Metadata for Python packages PEPs. + +Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental). +""" +from __future__ import unicode_literals + +import codecs +from email import message_from_file +import json +import logging +import re + + +from . import DistlibException, __version__ +from .compat import StringIO, string_types, text_type +from .markers import interpret +from .util import extract_by_key, get_extras +from .version import get_scheme, PEP440_VERSION_RE + +logger = logging.getLogger(__name__) + + +class MetadataMissingError(DistlibException): + """A required metadata is missing""" + + +class MetadataConflictError(DistlibException): + """Attempt to read or write metadata fields that are conflictual.""" + + +class MetadataUnrecognizedVersionError(DistlibException): + """Unknown metadata version number.""" + + +class MetadataInvalidError(DistlibException): + """A metadata value is invalid""" + +# public API of this module +__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] + +# Encoding used for the PKG-INFO files +PKG_INFO_ENCODING = 'utf-8' + +# preferred version. Hopefully will be changed +# to 1.2 once PEP 345 is supported everywhere +PKG_INFO_PREFERRED_VERSION = '1.1' + +_LINE_PREFIX = re.compile('\n \|') +_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License') + +_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License', 'Classifier', 'Download-URL', 'Obsoletes', + 'Provides', 'Requires') + +_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', + 'Download-URL') + +_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') + +_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email', 'Project-URL') + +_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External', 'Private-Version', + 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', + 'Provides-Extra') + +_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', + 'Setup-Requires-Dist', 'Extension') + +_ALL_FIELDS = set() +_ALL_FIELDS.update(_241_FIELDS) +_ALL_FIELDS.update(_314_FIELDS) +_ALL_FIELDS.update(_345_FIELDS) +_ALL_FIELDS.update(_426_FIELDS) + +EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') + + +def _version2fieldlist(version): + if version == '1.0': + return _241_FIELDS + elif version == '1.1': + return _314_FIELDS + elif version == '1.2': + return _345_FIELDS + elif version == '2.0': + return _426_FIELDS + raise MetadataUnrecognizedVersionError(version) + + +def _best_version(fields): + """Detect the best version depending on the fields used.""" + def _has_marker(keys, markers): + for marker in markers: + if marker in keys: + return True + return False + + keys = [] + for key, value in fields.items(): + if value in ([], 'UNKNOWN', None): + continue + keys.append(key) + + possible_versions = ['1.0', '1.1', '1.2', '2.0'] + + # first let's try to see if a field is not part of one of the version + for key in keys: + if key not in _241_FIELDS and '1.0' in possible_versions: + possible_versions.remove('1.0') + if key not in _314_FIELDS and '1.1' in possible_versions: + possible_versions.remove('1.1') + if key not in _345_FIELDS and '1.2' in possible_versions: + possible_versions.remove('1.2') + if key not in _426_FIELDS and '2.0' in possible_versions: + possible_versions.remove('2.0') + + # possible_version contains qualified versions + if len(possible_versions) == 1: + return possible_versions[0] # found ! + elif len(possible_versions) == 0: + raise MetadataConflictError('Unknown metadata set') + + # let's see if one unique marker is found + is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) + is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) + is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_2_0) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/2.0 fields') + + # we have the choice, 1.0, or 1.2, or 2.0 + # - 1.0 has a broken Summary field but works with all tools + # - 1.1 is to avoid + # - 1.2 fixes Summary but has little adoption + # - 2.0 adds more features and is very new + if not is_1_1 and not is_1_2 and not is_2_0: + # we couldn't find any specific marker + if PKG_INFO_PREFERRED_VERSION in possible_versions: + return PKG_INFO_PREFERRED_VERSION + if is_1_1: + return '1.1' + if is_1_2: + return '1.2' + + return '2.0' + +_ATTR2FIELD = { + 'metadata_version': 'Metadata-Version', + 'name': 'Name', + 'version': 'Version', + 'platform': 'Platform', + 'supported_platform': 'Supported-Platform', + 'summary': 'Summary', + 'description': 'Description', + 'keywords': 'Keywords', + 'home_page': 'Home-page', + 'author': 'Author', + 'author_email': 'Author-email', + 'maintainer': 'Maintainer', + 'maintainer_email': 'Maintainer-email', + 'license': 'License', + 'classifier': 'Classifier', + 'download_url': 'Download-URL', + 'obsoletes_dist': 'Obsoletes-Dist', + 'provides_dist': 'Provides-Dist', + 'requires_dist': 'Requires-Dist', + 'setup_requires_dist': 'Setup-Requires-Dist', + 'requires_python': 'Requires-Python', + 'requires_external': 'Requires-External', + 'requires': 'Requires', + 'provides': 'Provides', + 'obsoletes': 'Obsoletes', + 'project_url': 'Project-URL', + 'private_version': 'Private-Version', + 'obsoleted_by': 'Obsoleted-By', + 'extension': 'Extension', + 'provides_extra': 'Provides-Extra', +} + +_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') +_VERSIONS_FIELDS = ('Requires-Python',) +_VERSION_FIELDS = ('Version',) +_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', + 'Requires', 'Provides', 'Obsoletes-Dist', + 'Provides-Dist', 'Requires-Dist', 'Requires-External', + 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', + 'Provides-Extra', 'Extension') +_LISTTUPLEFIELDS = ('Project-URL',) + +_ELEMENTSFIELD = ('Keywords',) + +_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') + +_MISSING = object() + +_FILESAFE = re.compile('[^A-Za-z0-9.]+') + + +def _get_name_and_version(name, version, for_filename=False): + """Return the distribution name with version. + + If for_filename is true, return a filename-escaped form.""" + if for_filename: + # For both name and version any runs of non-alphanumeric or '.' + # characters are replaced with a single '-'. Additionally any + # spaces in the version string become '.' + name = _FILESAFE.sub('-', name) + version = _FILESAFE.sub('-', version.replace(' ', '.')) + return '%s-%s' % (name, version) + + +class LegacyMetadata(object): + """The legacy metadata of a release. + + Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can + instantiate the class with one of these arguments (or none): + - *path*, the path to a metadata file + - *fileobj* give a file-like object with metadata as content + - *mapping* is a dict-like object + - *scheme* is a version scheme name + """ + # TODO document the mapping API and UNKNOWN default key + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._fields = {} + self.requires_files = [] + self._dependencies = None + self.scheme = scheme + if path is not None: + self.read(path) + elif fileobj is not None: + self.read_file(fileobj) + elif mapping is not None: + self.update(mapping) + self.set_metadata_version() + + def set_metadata_version(self): + self._fields['Metadata-Version'] = _best_version(self._fields) + + def _write_field(self, fileobj, name, value): + fileobj.write('%s: %s\n' % (name, value)) + + def __getitem__(self, name): + return self.get(name) + + def __setitem__(self, name, value): + return self.set(name, value) + + def __delitem__(self, name): + field_name = self._convert_name(name) + try: + del self._fields[field_name] + except KeyError: + raise KeyError(name) + + def __contains__(self, name): + return (name in self._fields or + self._convert_name(name) in self._fields) + + def _convert_name(self, name): + if name in _ALL_FIELDS: + return name + name = name.replace('-', '_').lower() + return _ATTR2FIELD.get(name, name) + + def _default_value(self, name): + if name in _LISTFIELDS or name in _ELEMENTSFIELD: + return [] + return 'UNKNOWN' + + def _remove_line_prefix(self, value): + return _LINE_PREFIX.sub('\n', value) + + def __getattr__(self, name): + if name in _ATTR2FIELD: + return self[name] + raise AttributeError(name) + + # + # Public API + # + +# dependencies = property(_get_dependencies, _set_dependencies) + + def get_fullname(self, filesafe=False): + """Return the distribution name with version. + + If filesafe is true, return a filename-escaped form.""" + return _get_name_and_version(self['Name'], self['Version'], filesafe) + + def is_field(self, name): + """return True if name is a valid metadata key""" + name = self._convert_name(name) + return name in _ALL_FIELDS + + def is_multi_field(self, name): + name = self._convert_name(name) + return name in _LISTFIELDS + + def read(self, filepath): + """Read the metadata values from a file path.""" + fp = codecs.open(filepath, 'r', encoding='utf-8') + try: + self.read_file(fp) + finally: + fp.close() + + def read_file(self, fileob): + """Read the metadata values from a file object.""" + msg = message_from_file(fileob) + self._fields['Metadata-Version'] = msg['metadata-version'] + + # When reading, get all the fields we can + for field in _ALL_FIELDS: + if field not in msg: + continue + if field in _LISTFIELDS: + # we can have multiple lines + values = msg.get_all(field) + if field in _LISTTUPLEFIELDS and values is not None: + values = [tuple(value.split(',')) for value in values] + self.set(field, values) + else: + # single line + value = msg[field] + if value is not None and value != 'UNKNOWN': + self.set(field, value) + self.set_metadata_version() + + def write(self, filepath, skip_unknown=False): + """Write the metadata fields to filepath.""" + fp = codecs.open(filepath, 'w', encoding='utf-8') + try: + self.write_file(fp, skip_unknown) + finally: + fp.close() + + def write_file(self, fileobject, skip_unknown=False): + """Write the PKG-INFO format data to a file object.""" + self.set_metadata_version() + + for field in _version2fieldlist(self['Metadata-Version']): + values = self.get(field) + if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): + continue + if field in _ELEMENTSFIELD: + self._write_field(fileobject, field, ','.join(values)) + continue + if field not in _LISTFIELDS: + if field == 'Description': + values = values.replace('\n', '\n |') + values = [values] + + if field in _LISTTUPLEFIELDS: + values = [','.join(value) for value in values] + + for value in values: + self._write_field(fileobject, field, value) + + def update(self, other=None, **kwargs): + """Set metadata values from the given iterable `other` and kwargs. + + Behavior is like `dict.update`: If `other` has a ``keys`` method, + they are looped over and ``self[key]`` is assigned ``other[key]``. + Else, ``other`` is an iterable of ``(key, value)`` iterables. + + Keys that don't match a metadata field or that have an empty value are + dropped. + """ + def _set(key, value): + if key in _ATTR2FIELD and value: + self.set(self._convert_name(key), value) + + if not other: + # other is None or empty container + pass + elif hasattr(other, 'keys'): + for k in other.keys(): + _set(k, other[k]) + else: + for k, v in other: + _set(k, v) + + if kwargs: + for k, v in kwargs.items(): + _set(k, v) + + def set(self, name, value): + """Control then set a metadata field.""" + name = self._convert_name(name) + + if ((name in _ELEMENTSFIELD or name == 'Platform') and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [v.strip() for v in value.split(',')] + else: + value = [] + elif (name in _LISTFIELDS and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [value] + else: + value = [] + + if logger.isEnabledFor(logging.WARNING): + project_name = self['Name'] + + scheme = get_scheme(self.scheme) + if name in _PREDICATE_FIELDS and value is not None: + for v in value: + # check that the values are valid + if not scheme.is_valid_matcher(v.split(';')[0]): + logger.warning( + '%r: %r is not valid (field %r)', + project_name, v, name) + # FIXME this rejects UNKNOWN, is that right? + elif name in _VERSIONS_FIELDS and value is not None: + if not scheme.is_valid_constraint_list(value): + logger.warning('%r: %r is not a valid version (field %r)', + project_name, value, name) + elif name in _VERSION_FIELDS and value is not None: + if not scheme.is_valid_version(value): + logger.warning('%r: %r is not a valid version (field %r)', + project_name, value, name) + + if name in _UNICODEFIELDS: + if name == 'Description': + value = self._remove_line_prefix(value) + + self._fields[name] = value + + def get(self, name, default=_MISSING): + """Get a metadata field.""" + name = self._convert_name(name) + if name not in self._fields: + if default is _MISSING: + default = self._default_value(name) + return default + if name in _UNICODEFIELDS: + value = self._fields[name] + return value + elif name in _LISTFIELDS: + value = self._fields[name] + if value is None: + return [] + res = [] + for val in value: + if name not in _LISTTUPLEFIELDS: + res.append(val) + else: + # That's for Project-URL + res.append((val[0], val[1])) + return res + + elif name in _ELEMENTSFIELD: + value = self._fields[name] + if isinstance(value, string_types): + return value.split(',') + return self._fields[name] + + def check(self, strict=False): + """Check if the metadata is compliant. If strict is True then raise if + no Name or Version are provided""" + self.set_metadata_version() + + # XXX should check the versions (if the file was loaded) + missing, warnings = [], [] + + for attr in ('Name', 'Version'): # required by PEP 345 + if attr not in self: + missing.append(attr) + + if strict and missing != []: + msg = 'missing required metadata: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + + for attr in ('Home-page', 'Author'): + if attr not in self: + missing.append(attr) + + # checking metadata 1.2 (XXX needs to check 1.1, 1.0) + if self['Metadata-Version'] != '1.2': + return missing, warnings + + scheme = get_scheme(self.scheme) + + def are_valid_constraints(value): + for v in value: + if not scheme.is_valid_matcher(v.split(';')[0]): + return False + return True + + for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), + (_VERSIONS_FIELDS, + scheme.is_valid_constraint_list), + (_VERSION_FIELDS, + scheme.is_valid_version)): + for field in fields: + value = self.get(field, None) + if value is not None and not controller(value): + warnings.append('Wrong value for %r: %s' % (field, value)) + + return missing, warnings + + def todict(self, skip_missing=False): + """Return fields as a dict. + + Field names will be converted to use the underscore-lowercase style + instead of hyphen-mixed case (i.e. home_page instead of Home-page). + """ + self.set_metadata_version() + + mapping_1_0 = ( + ('metadata_version', 'Metadata-Version'), + ('name', 'Name'), + ('version', 'Version'), + ('summary', 'Summary'), + ('home_page', 'Home-page'), + ('author', 'Author'), + ('author_email', 'Author-email'), + ('license', 'License'), + ('description', 'Description'), + ('keywords', 'Keywords'), + ('platform', 'Platform'), + ('classifier', 'Classifier'), + ('download_url', 'Download-URL'), + ) + + data = {} + for key, field_name in mapping_1_0: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] + + if self['Metadata-Version'] == '1.2': + mapping_1_2 = ( + ('requires_dist', 'Requires-Dist'), + ('requires_python', 'Requires-Python'), + ('requires_external', 'Requires-External'), + ('provides_dist', 'Provides-Dist'), + ('obsoletes_dist', 'Obsoletes-Dist'), + ('project_url', 'Project-URL'), + ('maintainer', 'Maintainer'), + ('maintainer_email', 'Maintainer-email'), + ) + for key, field_name in mapping_1_2: + if not skip_missing or field_name in self._fields: + if key != 'project_url': + data[key] = self[field_name] + else: + data[key] = [','.join(u) for u in self[field_name]] + + elif self['Metadata-Version'] == '1.1': + mapping_1_1 = ( + ('provides', 'Provides'), + ('requires', 'Requires'), + ('obsoletes', 'Obsoletes'), + ) + for key, field_name in mapping_1_1: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] + + return data + + def add_requirements(self, requirements): + if self['Metadata-Version'] == '1.1': + # we can't have 1.1 metadata *and* Setuptools requires + for field in ('Obsoletes', 'Requires', 'Provides'): + if field in self: + del self[field] + self['Requires-Dist'] += requirements + + # Mapping API + # TODO could add iter* variants + + def keys(self): + return list(_version2fieldlist(self['Metadata-Version'])) + + def __iter__(self): + for key in self.keys(): + yield key + + def values(self): + return [self[key] for key in self.keys()] + + def items(self): + return [(key, self[key]) for key in self.keys()] + + def __repr__(self): + return '<%s %s %s>' % (self.__class__.__name__, self.name, + self.version) + + +METADATA_FILENAME = 'pydist.json' + + +class Metadata(object): + """ + The metadata of a release. This implementation uses 2.0 (JSON) + metadata where possible. If not possible, it wraps a LegacyMetadata + instance which handles the key-value metadata format. + """ + + METADATA_VERSION_MATCHER = re.compile('^\d+(\.\d+)*$') + + NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) + + VERSION_MATCHER = PEP440_VERSION_RE + + SUMMARY_MATCHER = re.compile('.{1,2047}') + + METADATA_VERSION = '2.0' + + GENERATOR = 'distlib (%s)' % __version__ + + MANDATORY_KEYS = { + 'name': (), + 'version': (), + 'summary': ('legacy',), + } + + INDEX_KEYS = ('name version license summary description author ' + 'author_email keywords platform home_page classifiers ' + 'download_url') + + DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' + 'dev_requires provides meta_requires obsoleted_by ' + 'supports_environments') + + SYNTAX_VALIDATORS = { + 'metadata_version': (METADATA_VERSION_MATCHER, ()), + 'name': (NAME_MATCHER, ('legacy',)), + 'version': (VERSION_MATCHER, ('legacy',)), + 'summary': (SUMMARY_MATCHER, ('legacy',)), + } + + __slots__ = ('_legacy', '_data', 'scheme') + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._legacy = None + self._data = None + self.scheme = scheme + #import pdb; pdb.set_trace() + if mapping is not None: + try: + self._validate_mapping(mapping, scheme) + self._data = mapping + except MetadataUnrecognizedVersionError: + self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) + self.validate() + else: + data = None + if path: + with open(path, 'rb') as f: + data = f.read() + elif fileobj: + data = fileobj.read() + if data is None: + # Initialised with no args - to be added + self._data = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + else: + if not isinstance(data, text_type): + data = data.decode('utf-8') + try: + self._data = json.loads(data) + self._validate_mapping(self._data, scheme) + except ValueError: + # Note: MetadataUnrecognizedVersionError does not + # inherit from ValueError (it's a DistlibException, + # which should not inherit from ValueError). + # The ValueError comes from the json.load - if that + # succeeds and we get a validation error, we want + # that to propagate + self._legacy = LegacyMetadata(fileobj=StringIO(data), + scheme=scheme) + self.validate() + + common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) + + none_list = (None, list) + none_dict = (None, dict) + + mapped_keys = { + 'run_requires': ('Requires-Dist', list), + 'build_requires': ('Setup-Requires-Dist', list), + 'dev_requires': none_list, + 'test_requires': none_list, + 'meta_requires': none_list, + 'extras': ('Provides-Extra', list), + 'modules': none_list, + 'namespaces': none_list, + 'exports': none_dict, + 'commands': none_dict, + 'classifiers': ('Classifier', list), + 'source_url': ('Download-URL', None), + 'metadata_version': ('Metadata-Version', None), + } + + del none_list, none_dict + + def __getattribute__(self, key): + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, maker = mapped[key] + if self._legacy: + if lk is None: + result = None if maker is None else maker() + else: + result = self._legacy.get(lk) + else: + value = None if maker is None else maker() + if key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + result = self._data.get(key, value) + else: + # special cases for PEP 459 + sentinel = object() + result = sentinel + d = self._data.get('extensions') + if d: + if key == 'commands': + result = d.get('python.commands', value) + elif key == 'classifiers': + d = d.get('python.details') + if d: + result = d.get(key, value) + else: + d = d.get('python.exports') + if d: + result = d.get(key, value) + if result is sentinel: + result = value + elif key not in common: + result = object.__getattribute__(self, key) + elif self._legacy: + result = self._legacy.get(key) + else: + result = self._data.get(key) + return result + + def _validate_value(self, key, value, scheme=None): + if key in self.SYNTAX_VALIDATORS: + pattern, exclusions = self.SYNTAX_VALIDATORS[key] + if (scheme or self.scheme) not in exclusions: + m = pattern.match(value) + if not m: + raise MetadataInvalidError('%r is an invalid value for ' + 'the %r property' % (value, + key)) + + def __setattr__(self, key, value): + self._validate_value(key, value) + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, _ = mapped[key] + if self._legacy: + if lk is None: + raise NotImplementedError + self._legacy[lk] = value + elif key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + self._data[key] = value + else: + # special cases for PEP 459 + d = self._data.setdefault('extensions', {}) + if key == 'commands': + d['python.commands'] = value + elif key == 'classifiers': + d = d.setdefault('python.details', {}) + d[key] = value + else: + d = d.setdefault('python.exports', {}) + d[key] = value + elif key not in common: + object.__setattr__(self, key, value) + else: + if key == 'keywords': + if isinstance(value, string_types): + value = value.strip() + if value: + value = value.split() + else: + value = [] + if self._legacy: + self._legacy[key] = value + else: + self._data[key] = value + + @property + def name_and_version(self): + return _get_name_and_version(self.name, self.version, True) + + @property + def provides(self): + if self._legacy: + result = self._legacy['Provides-Dist'] + else: + result = self._data.setdefault('provides', []) + s = '%s (%s)' % (self.name, self.version) + if s not in result: + result.append(s) + return result + + @provides.setter + def provides(self, value): + if self._legacy: + self._legacy['Provides-Dist'] = value + else: + self._data['provides'] = value + + def get_requirements(self, reqts, extras=None, env=None): + """ + Base method to get dependencies, given a set of extras + to satisfy and an optional environment context. + :param reqts: A list of sometimes-wanted dependencies, + perhaps dependent on extras and environment. + :param extras: A list of optional components being requested. + :param env: An optional environment for marker evaluation. + """ + if self._legacy: + result = reqts + else: + result = [] + extras = get_extras(extras or [], self.extras) + for d in reqts: + if 'extra' not in d and 'environment' not in d: + # unconditional + include = True + else: + if 'extra' not in d: + # Not extra-dependent - only environment-dependent + include = True + else: + include = d.get('extra') in extras + if include: + # Not excluded because of extras, check environment + marker = d.get('environment') + if marker: + include = interpret(marker, env) + if include: + result.extend(d['requires']) + for key in ('build', 'dev', 'test'): + e = ':%s:' % key + if e in extras: + extras.remove(e) + # A recursive call, but it should terminate since 'test' + # has been removed from the extras + reqts = self._data.get('%s_requires' % key, []) + result.extend(self.get_requirements(reqts, extras=extras, + env=env)) + return result + + @property + def dictionary(self): + if self._legacy: + return self._from_legacy() + return self._data + + @property + def dependencies(self): + if self._legacy: + raise NotImplementedError + else: + return extract_by_key(self._data, self.DEPENDENCY_KEYS) + + @dependencies.setter + def dependencies(self, value): + if self._legacy: + raise NotImplementedError + else: + self._data.update(value) + + def _validate_mapping(self, mapping, scheme): + if mapping.get('metadata_version') != self.METADATA_VERSION: + raise MetadataUnrecognizedVersionError() + missing = [] + for key, exclusions in self.MANDATORY_KEYS.items(): + if key not in mapping: + if scheme not in exclusions: + missing.append(key) + if missing: + msg = 'Missing metadata items: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + for k, v in mapping.items(): + self._validate_value(k, v, scheme) + + def validate(self): + if self._legacy: + missing, warnings = self._legacy.check(True) + if missing or warnings: + logger.warning('Metadata: missing: %s, warnings: %s', + missing, warnings) + else: + self._validate_mapping(self._data, self.scheme) + + def todict(self): + if self._legacy: + return self._legacy.todict(True) + else: + result = extract_by_key(self._data, self.INDEX_KEYS) + return result + + def _from_legacy(self): + assert self._legacy and not self._data + result = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + lmd = self._legacy.todict(True) # skip missing ones + for k in ('name', 'version', 'license', 'summary', 'description', + 'classifier'): + if k in lmd: + if k == 'classifier': + nk = 'classifiers' + else: + nk = k + result[nk] = lmd[k] + kw = lmd.get('Keywords', []) + if kw == ['']: + kw = [] + result['keywords'] = kw + keys = (('requires_dist', 'run_requires'), + ('setup_requires_dist', 'build_requires')) + for ok, nk in keys: + if ok in lmd and lmd[ok]: + result[nk] = [{'requires': lmd[ok]}] + result['provides'] = self.provides + author = {} + maintainer = {} + return result + + LEGACY_MAPPING = { + 'name': 'Name', + 'version': 'Version', + 'license': 'License', + 'summary': 'Summary', + 'description': 'Description', + 'classifiers': 'Classifier', + } + + def _to_legacy(self): + def process_entries(entries): + reqts = set() + for e in entries: + extra = e.get('extra') + env = e.get('environment') + rlist = e['requires'] + for r in rlist: + if not env and not extra: + reqts.add(r) + else: + marker = '' + if extra: + marker = 'extra == "%s"' % extra + if env: + if marker: + marker = '(%s) and %s' % (env, marker) + else: + marker = env + reqts.add(';'.join((r, marker))) + return reqts + + assert self._data and not self._legacy + result = LegacyMetadata() + nmd = self._data + for nk, ok in self.LEGACY_MAPPING.items(): + if nk in nmd: + result[ok] = nmd[nk] + r1 = process_entries(self.run_requires + self.meta_requires) + r2 = process_entries(self.build_requires + self.dev_requires) + if self.extras: + result['Provides-Extra'] = sorted(self.extras) + result['Requires-Dist'] = sorted(r1) + result['Setup-Requires-Dist'] = sorted(r2) + # TODO: other fields such as contacts + return result + + def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): + if [path, fileobj].count(None) != 1: + raise ValueError('Exactly one of path and fileobj is needed') + self.validate() + if legacy: + if self._legacy: + legacy_md = self._legacy + else: + legacy_md = self._to_legacy() + if path: + legacy_md.write(path, skip_unknown=skip_unknown) + else: + legacy_md.write_file(fileobj, skip_unknown=skip_unknown) + else: + if self._legacy: + d = self._from_legacy() + else: + d = self._data + if fileobj: + json.dump(d, fileobj, ensure_ascii=True, indent=2, + sort_keys=True) + else: + with codecs.open(path, 'w', 'utf-8') as f: + json.dump(d, f, ensure_ascii=True, indent=2, + sort_keys=True) + + def add_requirements(self, requirements): + if self._legacy: + self._legacy.add_requirements(requirements) + else: + run_requires = self._data.setdefault('run_requires', []) + always = None + for entry in run_requires: + if 'environment' not in entry and 'extra' not in entry: + always = entry + break + if always is None: + always = { 'requires': requirements } + run_requires.insert(0, always) + else: + rset = set(always['requires']) | set(requirements) + always['requires'] = sorted(rset) + + def __repr__(self): + name = self.name or '(no name)' + version = self.version or 'no version' + return '<%s %s %s (%s)>' % (self.__class__.__name__, + self.metadata_version, name, version) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/resources.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/resources.py new file mode 100644 index 0000000..c8e2f82 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/resources.py @@ -0,0 +1,350 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import bisect +import io +import logging +import os +import pkgutil +import shutil +import sys +import types +import zipimport + +from . import DistlibException +from .util import cached_property, get_cache_base, path_to_cache_dir, Cache + +logger = logging.getLogger(__name__) + + +cache = None # created when needed + + +class ResourceCache(Cache): + def __init__(self, base=None): + if base is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('resource-cache')) + super(ResourceCache, self).__init__(base) + + def is_stale(self, resource, path): + """ + Is the cache stale for the given resource? + + :param resource: The :class:`Resource` being cached. + :param path: The path of the resource in the cache. + :return: True if the cache is stale. + """ + # Cache invalidation is a hard problem :-) + return True + + def get(self, resource): + """ + Get a resource into the cache, + + :param resource: A :class:`Resource` instance. + :return: The pathname of the resource in the cache. + """ + prefix, path = resource.finder.get_cache_info(resource) + if prefix is None: + result = path + else: + result = os.path.join(self.base, self.prefix_to_dir(prefix), path) + dirname = os.path.dirname(result) + if not os.path.isdir(dirname): + os.makedirs(dirname) + if not os.path.exists(result): + stale = True + else: + stale = self.is_stale(resource, path) + if stale: + # write the bytes of the resource to the cache location + with open(result, 'wb') as f: + f.write(resource.bytes) + return result + + +class ResourceBase(object): + def __init__(self, finder, name): + self.finder = finder + self.name = name + + +class Resource(ResourceBase): + """ + A class representing an in-package resource, such as a data file. This is + not normally instantiated by user code, but rather by a + :class:`ResourceFinder` which manages the resource. + """ + is_container = False # Backwards compatibility + + def as_stream(self): + """ + Get the resource as a stream. + + This is not a property to make it obvious that it returns a new stream + each time. + """ + return self.finder.get_stream(self) + + @cached_property + def file_path(self): + global cache + if cache is None: + cache = ResourceCache() + return cache.get(self) + + @cached_property + def bytes(self): + return self.finder.get_bytes(self) + + @cached_property + def size(self): + return self.finder.get_size(self) + + +class ResourceContainer(ResourceBase): + is_container = True # Backwards compatibility + + @cached_property + def resources(self): + return self.finder.get_resources(self) + + +class ResourceFinder(object): + """ + Resource finder for file system resources. + """ + + if sys.platform.startswith('java'): + skipped_extensions = ('.pyc', '.pyo', '.class') + else: + skipped_extensions = ('.pyc', '.pyo') + + def __init__(self, module): + self.module = module + self.loader = getattr(module, '__loader__', None) + self.base = os.path.dirname(getattr(module, '__file__', '')) + + def _adjust_path(self, path): + return os.path.realpath(path) + + def _make_path(self, resource_name): + # Issue #50: need to preserve type of path on Python 2.x + # like os.path._get_sep + if isinstance(resource_name, bytes): # should only happen on 2.x + sep = b'/' + else: + sep = '/' + parts = resource_name.split(sep) + parts.insert(0, self.base) + result = os.path.join(*parts) + return self._adjust_path(result) + + def _find(self, path): + return os.path.exists(path) + + def get_cache_info(self, resource): + return None, resource.path + + def find(self, resource_name): + path = self._make_path(resource_name) + if not self._find(path): + result = None + else: + if self._is_directory(path): + result = ResourceContainer(self, resource_name) + else: + result = Resource(self, resource_name) + result.path = path + return result + + def get_stream(self, resource): + return open(resource.path, 'rb') + + def get_bytes(self, resource): + with open(resource.path, 'rb') as f: + return f.read() + + def get_size(self, resource): + return os.path.getsize(resource.path) + + def get_resources(self, resource): + def allowed(f): + return (f != '__pycache__' and not + f.endswith(self.skipped_extensions)) + return set([f for f in os.listdir(resource.path) if allowed(f)]) + + def is_container(self, resource): + return self._is_directory(resource.path) + + _is_directory = staticmethod(os.path.isdir) + + def iterator(self, resource_name): + resource = self.find(resource_name) + if resource is not None: + todo = [resource] + while todo: + resource = todo.pop(0) + yield resource + if resource.is_container: + rname = resource.name + for name in resource.resources: + if not rname: + new_name = name + else: + new_name = '/'.join([rname, name]) + child = self.find(new_name) + if child.is_container: + todo.append(child) + else: + yield child + + +class ZipResourceFinder(ResourceFinder): + """ + Resource finder for resources in .zip files. + """ + def __init__(self, module): + super(ZipResourceFinder, self).__init__(module) + archive = self.loader.archive + self.prefix_len = 1 + len(archive) + # PyPy doesn't have a _files attr on zipimporter, and you can't set one + if hasattr(self.loader, '_files'): + self._files = self.loader._files + else: + self._files = zipimport._zip_directory_cache[archive] + self.index = sorted(self._files) + + def _adjust_path(self, path): + return path + + def _find(self, path): + path = path[self.prefix_len:] + if path in self._files: + result = True + else: + if path and path[-1] != os.sep: + path = path + os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + if not result: + logger.debug('_find failed: %r %r', path, self.loader.prefix) + else: + logger.debug('_find worked: %r %r', path, self.loader.prefix) + return result + + def get_cache_info(self, resource): + prefix = self.loader.archive + path = resource.path[1 + len(prefix):] + return prefix, path + + def get_bytes(self, resource): + return self.loader.get_data(resource.path) + + def get_stream(self, resource): + return io.BytesIO(self.get_bytes(resource)) + + def get_size(self, resource): + path = resource.path[self.prefix_len:] + return self._files[path][3] + + def get_resources(self, resource): + path = resource.path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + plen = len(path) + result = set() + i = bisect.bisect(self.index, path) + while i < len(self.index): + if not self.index[i].startswith(path): + break + s = self.index[i][plen:] + result.add(s.split(os.sep, 1)[0]) # only immediate children + i += 1 + return result + + def _is_directory(self, path): + path = path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + return result + +_finder_registry = { + type(None): ResourceFinder, + zipimport.zipimporter: ZipResourceFinder +} + +try: + import _frozen_importlib + _finder_registry[_frozen_importlib.SourceFileLoader] = ResourceFinder + _finder_registry[_frozen_importlib.FileFinder] = ResourceFinder +except (ImportError, AttributeError): + pass + + +def register_finder(loader, finder_maker): + _finder_registry[type(loader)] = finder_maker + +_finder_cache = {} + + +def finder(package): + """ + Return a resource finder for a package. + :param package: The name of the package. + :return: A :class:`ResourceFinder` instance for the package. + """ + if package in _finder_cache: + result = _finder_cache[package] + else: + if package not in sys.modules: + __import__(package) + module = sys.modules[package] + path = getattr(module, '__path__', None) + if path is None: + raise DistlibException('You cannot get a finder for a module, ' + 'only for a package') + loader = getattr(module, '__loader__', None) + finder_maker = _finder_registry.get(type(loader)) + if finder_maker is None: + raise DistlibException('Unable to locate finder for %r' % package) + result = finder_maker(module) + _finder_cache[package] = result + return result + + +_dummy_module = types.ModuleType(str('__dummy__')) + + +def finder_for_path(path): + """ + Return a resource finder for a path, which should represent a container. + + :param path: The path. + :return: A :class:`ResourceFinder` instance for the path. + """ + result = None + # calls any path hooks, gets importer into cache + pkgutil.get_importer(path) + loader = sys.path_importer_cache.get(path) + finder = _finder_registry.get(type(loader)) + if finder: + module = _dummy_module + module.__file__ = os.path.join(path, '') + module.__loader__ = loader + result = finder(module) + return result diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/scripts.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/scripts.py new file mode 100644 index 0000000..2aa6eb7 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/scripts.py @@ -0,0 +1,365 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from io import BytesIO +import logging +import os +import re +import struct +import sys + +from .compat import sysconfig, detect_encoding, ZipFile +from .resources import finder +from .util import (FileOperator, get_export_entry, convert_path, + get_executable, in_venv) + +logger = logging.getLogger(__name__) + +_DEFAULT_MANIFEST = ''' + + + + + + + + + + + + +'''.strip() + +# check if Python is called on the first line with this expression +FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') +SCRIPT_TEMPLATE = '''# -*- coding: utf-8 -*- +if __name__ == '__main__': + import sys, re + + def _resolve(module, func): + __import__(module) + mod = sys.modules[module] + parts = func.split('.') + result = getattr(mod, parts.pop(0)) + for p in parts: + result = getattr(result, p) + return result + + try: + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + + func = _resolve('%(module)s', '%(func)s') + rc = func() # None interpreted as 0 + except Exception as e: # only supporting Python >= 2.6 + sys.stderr.write('%%s\\n' %% e) + rc = 1 + sys.exit(rc) +''' + + +class ScriptMaker(object): + """ + A class to copy or create scripts from source scripts or callable + specifications. + """ + script_template = SCRIPT_TEMPLATE + + executable = None # for shebangs + + def __init__(self, source_dir, target_dir, add_launchers=True, + dry_run=False, fileop=None): + self.source_dir = source_dir + self.target_dir = target_dir + self.add_launchers = add_launchers + self.force = False + self.clobber = False + # It only makes sense to set mode bits on POSIX. + self.set_mode = (os.name == 'posix') or (os.name == 'java' and + os._name == 'posix') + self.variants = set(('', 'X.Y')) + self._fileop = fileop or FileOperator(dry_run) + + def _get_alternate_executable(self, executable, options): + if options.get('gui', False) and os.name == 'nt': + dn, fn = os.path.split(executable) + fn = fn.replace('python', 'pythonw') + executable = os.path.join(dn, fn) + return executable + + if sys.platform.startswith('java'): # pragma: no cover + def _is_shell(self, executable): + """ + Determine if the specified executable is a script + (contains a #! line) + """ + try: + with open(executable) as fp: + return fp.read(2) == '#!' + except (OSError, IOError): + logger.warning('Failed to open %s', executable) + return False + + def _fix_jython_executable(self, executable): + if self._is_shell(executable): + # Workaround for Jython is not needed on Linux systems. + import java + + if java.lang.System.getProperty('os.name') == 'Linux': + return executable + elif executable.lower().endswith('jython.exe'): + # Use wrapper exe for Jython on Windows + return executable + return '/usr/bin/env %s' % executable + + def _get_shebang(self, encoding, post_interp=b'', options=None): + enquote = True + if self.executable: + executable = self.executable + enquote = False # assume this will be taken care of + elif not sysconfig.is_python_build(): + executable = get_executable() + elif in_venv(): + executable = os.path.join(sysconfig.get_path('scripts'), + 'python%s' % sysconfig.get_config_var('EXE')) + else: + executable = os.path.join( + sysconfig.get_config_var('BINDIR'), + 'python%s%s' % (sysconfig.get_config_var('VERSION'), + sysconfig.get_config_var('EXE'))) + if options: + executable = self._get_alternate_executable(executable, options) + + if sys.platform.startswith('java'): # pragma: no cover + executable = self._fix_jython_executable(executable) + # Normalise case for Windows + executable = os.path.normcase(executable) + # If the user didn't specify an executable, it may be necessary to + # cater for executable paths with spaces (not uncommon on Windows) + if enquote and ' ' in executable: + executable = '"%s"' % executable + # Issue #51: don't use fsencode, since we later try to + # check that the shebang is decodable using utf-8. + executable = executable.encode('utf-8') + # in case of IronPython, play safe and enable frames support + if (sys.platform == 'cli' and '-X:Frames' not in post_interp + and '-X:FullFrames' not in post_interp): + post_interp += b' -X:Frames' + shebang = b'#!' + executable + post_interp + b'\n' + # Python parser starts to read a script using UTF-8 until + # it gets a #coding:xxx cookie. The shebang has to be the + # first line of a file, the #coding:xxx cookie cannot be + # written before. So the shebang has to be decodable from + # UTF-8. + try: + shebang.decode('utf-8') + except UnicodeDecodeError: + raise ValueError( + 'The shebang (%r) is not decodable from utf-8' % shebang) + # If the script is encoded to a custom encoding (use a + # #coding:xxx cookie), the shebang has to be decodable from + # the script encoding too. + if encoding != 'utf-8': + try: + shebang.decode(encoding) + except UnicodeDecodeError: + raise ValueError( + 'The shebang (%r) is not decodable ' + 'from the script encoding (%r)' % (shebang, encoding)) + return shebang + + def _get_script_text(self, entry): + return self.script_template % dict(module=entry.prefix, + func=entry.suffix) + + manifest = _DEFAULT_MANIFEST + + def get_manifest(self, exename): + base = os.path.basename(exename) + return self.manifest % base + + def _write_script(self, names, shebang, script_bytes, filenames, ext): + use_launcher = self.add_launchers and os.name == 'nt' + linesep = os.linesep.encode('utf-8') + if not use_launcher: + script_bytes = shebang + linesep + script_bytes + else: + if ext == 'py': + launcher = self._get_launcher('t') + else: + launcher = self._get_launcher('w') + stream = BytesIO() + with ZipFile(stream, 'w') as zf: + zf.writestr('__main__.py', script_bytes) + zip_data = stream.getvalue() + script_bytes = launcher + shebang + linesep + zip_data + for name in names: + outname = os.path.join(self.target_dir, name) + if use_launcher: + n, e = os.path.splitext(outname) + if e.startswith('.py'): + outname = n + outname = '%s.exe' % outname + try: + self._fileop.write_binary_file(outname, script_bytes) + except Exception: + # Failed writing an executable - it might be in use. + logger.warning('Failed to write executable - trying to ' + 'use .deleteme logic') + dfname = '%s.deleteme' % outname + if os.path.exists(dfname): + os.remove(dfname) # Not allowed to fail here + os.rename(outname, dfname) # nor here + self._fileop.write_binary_file(outname, script_bytes) + logger.debug('Able to replace executable using ' + '.deleteme logic') + try: + os.remove(dfname) + except Exception: + pass # still in use - ignore error + else: + if os.name == 'nt' and not outname.endswith('.' + ext): + outname = '%s.%s' % (outname, ext) + if os.path.exists(outname) and not self.clobber: + logger.warning('Skipping existing file %s', outname) + continue + self._fileop.write_binary_file(outname, script_bytes) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + + def _make_script(self, entry, filenames, options=None): + post_interp = b'' + if options: + args = options.get('interpreter_args', []) + if args: + args = ' %s' % ' '.join(args) + post_interp = args.encode('utf-8') + shebang = self._get_shebang('utf-8', post_interp, options=options) + script = self._get_script_text(entry).encode('utf-8') + name = entry.name + scriptnames = set() + if '' in self.variants: + scriptnames.add(name) + if 'X' in self.variants: + scriptnames.add('%s%s' % (name, sys.version[0])) + if 'X.Y' in self.variants: + scriptnames.add('%s-%s' % (name, sys.version[:3])) + if options and options.get('gui', False): + ext = 'pyw' + else: + ext = 'py' + self._write_script(scriptnames, shebang, script, filenames, ext) + + def _copy_script(self, script, filenames): + adjust = False + script = os.path.join(self.source_dir, convert_path(script)) + outname = os.path.join(self.target_dir, os.path.basename(script)) + if not self.force and not self._fileop.newer(script, outname): + logger.debug('not copying %s (up-to-date)', script) + return + + # Always open the file, but ignore failures in dry-run mode -- + # that way, we'll get accurate feedback if we can read the + # script. + try: + f = open(script, 'rb') + except IOError: + if not self.dry_run: + raise + f = None + else: + encoding, lines = detect_encoding(f.readline) + f.seek(0) + first_line = f.readline() + if not first_line: + logger.warning('%s: %s is an empty file (skipping)', + self.get_command_name(), script) + return + + match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) + if match: + adjust = True + post_interp = match.group(1) or b'' + + if not adjust: + if f: + f.close() + self._fileop.copy_file(script, outname) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + else: + logger.info('copying and adjusting %s -> %s', script, + self.target_dir) + if not self._fileop.dry_run: + shebang = self._get_shebang(encoding, post_interp) + if b'pythonw' in first_line: + ext = 'pyw' + else: + ext = 'py' + n = os.path.basename(outname) + self._write_script([n], shebang, f.read(), filenames, ext) + if f: + f.close() + + @property + def dry_run(self): + return self._fileop.dry_run + + @dry_run.setter + def dry_run(self, value): + self._fileop.dry_run = value + + if os.name == 'nt': + # Executable launcher support. + # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ + + def _get_launcher(self, kind): + if struct.calcsize('P') == 8: # 64-bit + bits = '64' + else: + bits = '32' + name = '%s%s.exe' % (kind, bits) + # Issue 31: don't hardcode an absolute package name, but + # determine it relative to the current package + distlib_package = __name__.rsplit('.', 1)[0] + result = finder(distlib_package).find(name).bytes + return result + + # Public API follows + + def make(self, specification, options=None): + """ + Make a script. + + :param specification: The specification, which is either a valid export + entry specification (to make a script from a + callable) or a filename (to make a script by + copying from a source location). + :param options: A dictionary of options controlling script generation. + :return: A list of all absolute pathnames written to. + """ + filenames = [] + entry = get_export_entry(specification) + if entry is None: + self._copy_script(specification, filenames) + else: + self._make_script(entry, filenames, options=options) + return filenames + + def make_multiple(self, specifications, options=None): + """ + Take a list of specifications and make scripts from them, + :param specifications: A list of specifications. + :return: A list of all absolute pathnames written to, + """ + filenames = [] + for specification in specifications: + filenames.extend(self.make(specification, options)) + return filenames diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/t32.exe b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/t32.exe new file mode 100644 index 0000000..e0168c2 Binary files /dev/null and b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/t32.exe differ diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/t64.exe b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/t64.exe new file mode 100644 index 0000000..29a1fd6 Binary files /dev/null and b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/t64.exe differ diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/util.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/util.py new file mode 100644 index 0000000..7555c1e --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/util.py @@ -0,0 +1,1579 @@ +# +# Copyright (C) 2012-2014 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import codecs +from collections import deque +import contextlib +import csv +from glob import iglob as std_iglob +import io +import json +import logging +import os +import py_compile +import re +import shutil +import socket +import ssl +import subprocess +import sys +import tarfile +import tempfile +try: + import threading +except ImportError: + import dummy_threading as threading +import time + +from . import DistlibException +from .compat import (string_types, text_type, shutil, raw_input, StringIO, + cache_from_source, urlopen, httplib, xmlrpclib, splittype, + HTTPHandler, HTTPSHandler as BaseHTTPSHandler, + BaseConfigurator, valid_ident, Container, configparser, + URLError, match_hostname, CertificateError, ZipFile) + +logger = logging.getLogger(__name__) + +# +# Requirement parsing code for name + optional constraints + optional extras +# +# e.g. 'foo >= 1.2, < 2.0 [bar, baz]' +# +# The regex can seem a bit hairy, so we build it up out of smaller pieces +# which are manageable. +# + +COMMA = r'\s*,\s*' +COMMA_RE = re.compile(COMMA) + +IDENT = r'(\w|[.-])+' +EXTRA_IDENT = r'(\*|:(\*|\w+):|' + IDENT + ')' +VERSPEC = IDENT + r'\*?' + +RELOP = '([<>=!~]=)|[<>]' + +# +# The first relop is optional - if absent, will be taken as '~=' +# +BARE_CONSTRAINTS = ('(' + RELOP + r')?\s*(' + VERSPEC + ')(' + COMMA + '(' + + RELOP + r')\s*(' + VERSPEC + '))*') + +DIRECT_REF = '(from\s+(?P.*))' + +# +# Either the bare constraints or the bare constraints in parentheses +# +CONSTRAINTS = (r'\(\s*(?P' + BARE_CONSTRAINTS + '|' + DIRECT_REF + + r')\s*\)|(?P' + BARE_CONSTRAINTS + '\s*)') + +EXTRA_LIST = EXTRA_IDENT + '(' + COMMA + EXTRA_IDENT + ')*' +EXTRAS = r'\[\s*(?P' + EXTRA_LIST + r')?\s*\]' +REQUIREMENT = ('(?P' + IDENT + r')\s*(' + EXTRAS + r'\s*)?(\s*' + + CONSTRAINTS + ')?$') +REQUIREMENT_RE = re.compile(REQUIREMENT) + +# +# Used to scan through the constraints +# +RELOP_IDENT = '(?P' + RELOP + r')\s*(?P' + VERSPEC + ')' +RELOP_IDENT_RE = re.compile(RELOP_IDENT) + +def parse_requirement(s): + + def get_constraint(m): + d = m.groupdict() + return d['op'], d['vn'] + + result = None + m = REQUIREMENT_RE.match(s) + if m: + d = m.groupdict() + name = d['dn'] + cons = d['c1'] or d['c2'] + if not d['diref']: + url = None + else: + # direct reference + cons = None + url = d['diref'].strip() + if not cons: + cons = None + constr = '' + rs = d['dn'] + else: + if cons[0] not in '<>!=': + cons = '~=' + cons + iterator = RELOP_IDENT_RE.finditer(cons) + cons = [get_constraint(m) for m in iterator] + rs = '%s (%s)' % (name, ', '.join(['%s %s' % con for con in cons])) + if not d['ex']: + extras = None + else: + extras = COMMA_RE.split(d['ex']) + result = Container(name=name, constraints=cons, extras=extras, + requirement=rs, source=s, url=url) + return result + + +def get_resources_dests(resources_root, rules): + """Find destinations for resources files""" + + def get_rel_path(base, path): + # normalizes and returns a lstripped-/-separated path + base = base.replace(os.path.sep, '/') + path = path.replace(os.path.sep, '/') + assert path.startswith(base) + return path[len(base):].lstrip('/') + + + destinations = {} + for base, suffix, dest in rules: + prefix = os.path.join(resources_root, base) + for abs_base in iglob(prefix): + abs_glob = os.path.join(abs_base, suffix) + for abs_path in iglob(abs_glob): + resource_file = get_rel_path(resources_root, abs_path) + if dest is None: # remove the entry if it was here + destinations.pop(resource_file, None) + else: + rel_path = get_rel_path(abs_base, abs_path) + rel_dest = dest.replace(os.path.sep, '/').rstrip('/') + destinations[resource_file] = rel_dest + '/' + rel_path + return destinations + + +def in_venv(): + if hasattr(sys, 'real_prefix'): + # virtualenv venvs + result = True + else: + # PEP 405 venvs + result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) + return result + + +def get_executable(): +# The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as +# changes to the stub launcher mean that sys.executable always points +# to the stub on OS X +# if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' +# in os.environ): +# result = os.environ['__PYVENV_LAUNCHER__'] +# else: +# result = sys.executable +# return result + return os.path.normcase(sys.executable) + + +def proceed(prompt, allowed_chars, error_prompt=None, default=None): + p = prompt + while True: + s = raw_input(p) + p = prompt + if not s and default: + s = default + if s: + c = s[0].lower() + if c in allowed_chars: + break + if error_prompt: + p = '%c: %s\n%s' % (c, error_prompt, prompt) + return c + + +def extract_by_key(d, keys): + if isinstance(keys, string_types): + keys = keys.split() + result = {} + for key in keys: + if key in d: + result[key] = d[key] + return result + +def read_exports(stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + # Try to load as JSON, falling back on legacy format + data = stream.read() + stream = StringIO(data) + try: + data = json.load(stream) + result = data['extensions']['python.exports']['exports'] + for group, entries in result.items(): + for k, v in entries.items(): + s = '%s = %s' % (k, v) + entry = get_export_entry(s) + assert entry is not None + entries[k] = entry + return result + except Exception: + stream.seek(0, 0) + cp = configparser.ConfigParser() + if hasattr(cp, 'read_file'): + cp.read_file(stream) + else: + cp.readfp(stream) + result = {} + for key in cp.sections(): + result[key] = entries = {} + for name, value in cp.items(key): + s = '%s = %s' % (name, value) + entry = get_export_entry(s) + assert entry is not None + #entry.dist = self + entries[name] = entry + return result + + +def write_exports(exports, stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getwriter('utf-8')(stream) + cp = configparser.ConfigParser() + for k, v in exports.items(): + # TODO check k, v for valid values + cp.add_section(k) + for entry in v.values(): + if entry.suffix is None: + s = entry.prefix + else: + s = '%s:%s' % (entry.prefix, entry.suffix) + if entry.flags: + s = '%s [%s]' % (s, ', '.join(entry.flags)) + cp.set(k, entry.name, s) + cp.write(stream) + + +@contextlib.contextmanager +def tempdir(): + td = tempfile.mkdtemp() + try: + yield td + finally: + shutil.rmtree(td) + +@contextlib.contextmanager +def chdir(d): + cwd = os.getcwd() + try: + os.chdir(d) + yield + finally: + os.chdir(cwd) + + +@contextlib.contextmanager +def socket_timeout(seconds=15): + cto = socket.getdefaulttimeout() + try: + socket.setdefaulttimeout(seconds) + yield + finally: + socket.setdefaulttimeout(cto) + + +class cached_property(object): + def __init__(self, func): + self.func = func + #for attr in ('__name__', '__module__', '__doc__'): + # setattr(self, attr, getattr(func, attr, None)) + + def __get__(self, obj, cls=None): + if obj is None: + return self + value = self.func(obj) + object.__setattr__(obj, self.func.__name__, value) + #obj.__dict__[self.func.__name__] = value = self.func(obj) + return value + +def convert_path(pathname): + """Return 'pathname' as a name that will work on the native filesystem. + + The path is split on '/' and put back together again using the current + directory separator. Needed because filenames in the setup script are + always supplied in Unix style, and have to be converted to the local + convention before we can actually use them in the filesystem. Raises + ValueError on non-Unix-ish systems if 'pathname' either starts or + ends with a slash. + """ + if os.sep == '/': + return pathname + if not pathname: + return pathname + if pathname[0] == '/': + raise ValueError("path '%s' cannot be absolute" % pathname) + if pathname[-1] == '/': + raise ValueError("path '%s' cannot end with '/'" % pathname) + + paths = pathname.split('/') + while os.curdir in paths: + paths.remove(os.curdir) + if not paths: + return os.curdir + return os.path.join(*paths) + + +class FileOperator(object): + def __init__(self, dry_run=False): + self.dry_run = dry_run + self.ensured = set() + self._init_record() + + def _init_record(self): + self.record = False + self.files_written = set() + self.dirs_created = set() + + def record_as_written(self, path): + if self.record: + self.files_written.add(path) + + def newer(self, source, target): + """Tell if the target is newer than the source. + + Returns true if 'source' exists and is more recently modified than + 'target', or if 'source' exists and 'target' doesn't. + + Returns false if both exist and 'target' is the same age or younger + than 'source'. Raise PackagingFileError if 'source' does not exist. + + Note that this test is not very accurate: files created in the same + second will have the same "age". + """ + if not os.path.exists(source): + raise DistlibException("file '%r' does not exist" % + os.path.abspath(source)) + if not os.path.exists(target): + return True + + return os.stat(source).st_mtime > os.stat(target).st_mtime + + def copy_file(self, infile, outfile, check=True): + """Copy a file respecting dry-run and force flags. + """ + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying %s to %s', infile, outfile) + if not self.dry_run: + msg = None + if check: + if os.path.islink(outfile): + msg = '%s is a symlink' % outfile + elif os.path.exists(outfile) and not os.path.isfile(outfile): + msg = '%s is a non-regular file' % outfile + if msg: + raise ValueError(msg + ' which would be overwritten') + shutil.copyfile(infile, outfile) + self.record_as_written(outfile) + + def copy_stream(self, instream, outfile, encoding=None): + assert not os.path.isdir(outfile) + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying stream %s to %s', instream, outfile) + if not self.dry_run: + if encoding is None: + outstream = open(outfile, 'wb') + else: + outstream = codecs.open(outfile, 'w', encoding=encoding) + try: + shutil.copyfileobj(instream, outstream) + finally: + outstream.close() + self.record_as_written(outfile) + + def write_binary_file(self, path, data): + self.ensure_dir(os.path.dirname(path)) + if not self.dry_run: + with open(path, 'wb') as f: + f.write(data) + self.record_as_written(path) + + def write_text_file(self, path, data, encoding): + self.ensure_dir(os.path.dirname(path)) + if not self.dry_run: + with open(path, 'wb') as f: + f.write(data.encode(encoding)) + self.record_as_written(path) + + def set_mode(self, bits, mask, files): + if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): + # Set the executable bits (owner, group, and world) on + # all the files specified. + for f in files: + if self.dry_run: + logger.info("changing mode of %s", f) + else: + mode = (os.stat(f).st_mode | bits) & mask + logger.info("changing mode of %s to %o", f, mode) + os.chmod(f, mode) + + set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) + + def ensure_dir(self, path): + path = os.path.abspath(path) + if path not in self.ensured and not os.path.exists(path): + self.ensured.add(path) + d, f = os.path.split(path) + self.ensure_dir(d) + logger.info('Creating %s' % path) + if not self.dry_run: + os.mkdir(path) + if self.record: + self.dirs_created.add(path) + + def byte_compile(self, path, optimize=False, force=False, prefix=None): + dpath = cache_from_source(path, not optimize) + logger.info('Byte-compiling %s to %s', path, dpath) + if not self.dry_run: + if force or self.newer(path, dpath): + if not prefix: + diagpath = None + else: + assert path.startswith(prefix) + diagpath = path[len(prefix):] + py_compile.compile(path, dpath, diagpath, True) # raise error + self.record_as_written(dpath) + return dpath + + def ensure_removed(self, path): + if os.path.exists(path): + if os.path.isdir(path) and not os.path.islink(path): + logger.debug('Removing directory tree at %s', path) + if not self.dry_run: + shutil.rmtree(path) + if self.record: + if path in self.dirs_created: + self.dirs_created.remove(path) + else: + if os.path.islink(path): + s = 'link' + else: + s = 'file' + logger.debug('Removing %s %s', s, path) + if not self.dry_run: + os.remove(path) + if self.record: + if path in self.files_written: + self.files_written.remove(path) + + def is_writable(self, path): + result = False + while not result: + if os.path.exists(path): + result = os.access(path, os.W_OK) + break + parent = os.path.dirname(path) + if parent == path: + break + path = parent + return result + + def commit(self): + """ + Commit recorded changes, turn off recording, return + changes. + """ + assert self.record + result = self.files_written, self.dirs_created + self._init_record() + return result + + def rollback(self): + if not self.dry_run: + for f in list(self.files_written): + if os.path.exists(f): + os.remove(f) + # dirs should all be empty now, except perhaps for + # __pycache__ subdirs + # reverse so that subdirs appear before their parents + dirs = sorted(self.dirs_created, reverse=True) + for d in dirs: + flist = os.listdir(d) + if flist: + assert flist == ['__pycache__'] + sd = os.path.join(d, flist[0]) + os.rmdir(sd) + os.rmdir(d) # should fail if non-empty + self._init_record() + +def resolve(module_name, dotted_path): + if module_name in sys.modules: + mod = sys.modules[module_name] + else: + mod = __import__(module_name) + if dotted_path is None: + result = mod + else: + parts = dotted_path.split('.') + result = getattr(mod, parts.pop(0)) + for p in parts: + result = getattr(result, p) + return result + + +class ExportEntry(object): + def __init__(self, name, prefix, suffix, flags): + self.name = name + self.prefix = prefix + self.suffix = suffix + self.flags = flags + + @cached_property + def value(self): + return resolve(self.prefix, self.suffix) + + def __repr__(self): + return '' % (self.name, self.prefix, + self.suffix, self.flags) + + def __eq__(self, other): + if not isinstance(other, ExportEntry): + result = False + else: + result = (self.name == other.name and + self.prefix == other.prefix and + self.suffix == other.suffix and + self.flags == other.flags) + return result + + __hash__ = object.__hash__ + + +ENTRY_RE = re.compile(r'''(?P(\w|[-.])+) + \s*=\s*(?P(\w+)([:\.]\w+)*) + \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? + ''', re.VERBOSE) + + +def get_export_entry(specification): + m = ENTRY_RE.search(specification) + if not m: + result = None + if '[' in specification or ']' in specification: + raise DistlibException('Invalid specification ' + '%r' % specification) + else: + d = m.groupdict() + name = d['name'] + path = d['callable'] + colons = path.count(':') + if colons == 0: + prefix, suffix = path, None + else: + if colons != 1: + raise DistlibException('Invalid specification ' + '%r' % specification) + prefix, suffix = path.split(':') + flags = d['flags'] + if flags is None: + if '[' in specification or ']' in specification: + raise DistlibException('Invalid specification ' + '%r' % specification) + flags = [] + else: + flags = [f.strip() for f in flags.split(',')] + result = ExportEntry(name, prefix, suffix, flags) + return result + + +def get_cache_base(suffix=None): + """ + Return the default base location for distlib caches. If the directory does + not exist, it is created. Use the suffix provided for the base directory, + and default to '.distlib' if it isn't provided. + + On Windows, if LOCALAPPDATA is defined in the environment, then it is + assumed to be a directory, and will be the parent directory of the result. + On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home + directory - using os.expanduser('~') - will be the parent directory of + the result. + + The result is just the directory '.distlib' in the parent directory as + determined above, or with the name specified with ``suffix``. + """ + if suffix is None: + suffix = '.distlib' + if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: + result = os.path.expandvars('$localappdata') + else: + # Assume posix, or old Windows + result = os.path.expanduser('~') + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if os.path.isdir(result): + usable = os.access(result, os.W_OK) + if not usable: + logger.warning('Directory exists but is not writable: %s', result) + else: + try: + os.makedirs(result) + usable = True + except OSError: + logger.warning('Unable to create %s', result, exc_info=True) + usable = False + if not usable: + result = tempfile.mkdtemp() + logger.warning('Default location unusable, using %s', result) + return os.path.join(result, suffix) + + +def path_to_cache_dir(path): + """ + Convert an absolute path to a directory name for use in a cache. + + The algorithm used is: + + #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. + #. Any occurrence of ``os.sep`` is replaced with ``'--'``. + #. ``'.cache'`` is appended. + """ + d, p = os.path.splitdrive(os.path.abspath(path)) + if d: + d = d.replace(':', '---') + p = p.replace(os.sep, '--') + return d + p + '.cache' + + +def ensure_slash(s): + if not s.endswith('/'): + return s + '/' + return s + + +def parse_credentials(netloc): + username = password = None + if '@' in netloc: + prefix, netloc = netloc.split('@', 1) + if ':' not in prefix: + username = prefix + else: + username, password = prefix.split(':', 1) + return username, password, netloc + + +def get_process_umask(): + result = os.umask(0o22) + os.umask(result) + return result + +def is_string_sequence(seq): + result = True + i = None + for i, s in enumerate(seq): + if not isinstance(s, string_types): + result = False + break + assert i is not None + return result + +PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' + '([a-z0-9_.+-]+)', re.I) +PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') + + +def split_filename(filename, project_name=None): + """ + Extract name, version, python version from a filename (no extension) + + Return name, version, pyver or None + """ + result = None + pyver = None + m = PYTHON_VERSION.search(filename) + if m: + pyver = m.group(1) + filename = filename[:m.start()] + if project_name and len(filename) > len(project_name) + 1: + m = re.match(re.escape(project_name) + r'\b', filename) + if m: + n = m.end() + result = filename[:n], filename[n + 1:], pyver + if result is None: + m = PROJECT_NAME_AND_VERSION.match(filename) + if m: + result = m.group(1), m.group(3), pyver + return result + +# Allow spaces in name because of legacy dists like "Twisted Core" +NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' + r'\(\s*(?P[^\s)]+)\)$') + +def parse_name_and_version(p): + """ + A utility method used to get name and version from a string. + + From e.g. a Provides-Dist value. + + :param p: A value in a form 'foo (1.0)' + :return: The name and version as a tuple. + """ + m = NAME_VERSION_RE.match(p) + if not m: + raise DistlibException('Ill-formed name/version string: \'%s\'' % p) + d = m.groupdict() + return d['name'].strip().lower(), d['ver'] + +def get_extras(requested, available): + result = set() + requested = set(requested or []) + available = set(available or []) + if '*' in requested: + requested.remove('*') + result |= available + for r in requested: + if r == '-': + result.add(r) + elif r.startswith('-'): + unwanted = r[1:] + if unwanted not in available: + logger.warning('undeclared extra: %s' % unwanted) + if unwanted in result: + result.remove(unwanted) + else: + if r not in available: + logger.warning('undeclared extra: %s' % r) + result.add(r) + return result +# +# Extended metadata functionality +# + +def _get_external_data(url): + result = {} + try: + # urlopen might fail if it runs into redirections, + # because of Python issue #13696. Fixed in locators + # using a custom redirect handler. + resp = urlopen(url) + headers = resp.info() + if headers.get('Content-Type') != 'application/json': + logger.debug('Unexpected response for JSON request') + else: + reader = codecs.getreader('utf-8')(resp) + #data = reader.read().decode('utf-8') + #result = json.loads(data) + result = json.load(reader) + except Exception as e: + logger.exception('Failed to get external data for %s: %s', url, e) + return result + + +def get_project_data(name): + url = ('https://www.red-dove.com/pypi/projects/' + '%s/%s/project.json' % (name[0].upper(), name)) + result = _get_external_data(url) + return result + +def get_package_data(name, version): + url = ('https://www.red-dove.com/pypi/projects/' + '%s/%s/package-%s.json' % (name[0].upper(), name, version)) + return _get_external_data(url) + + +class Cache(object): + """ + A class implementing a cache for resources that need to live in the file system + e.g. shared libraries. This class was moved from resources to here because it + could be used by other modules, e.g. the wheel module. + """ + + def __init__(self, base): + """ + Initialise an instance. + + :param base: The base directory where the cache should be located. + """ + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if not os.path.isdir(base): + os.makedirs(base) + if (os.stat(base).st_mode & 0o77) != 0: + logger.warning('Directory \'%s\' is not private', base) + self.base = os.path.abspath(os.path.normpath(base)) + + def prefix_to_dir(self, prefix): + """ + Converts a resource prefix to a directory name in the cache. + """ + return path_to_cache_dir(prefix) + + def clear(self): + """ + Clear the cache. + """ + not_removed = [] + for fn in os.listdir(self.base): + fn = os.path.join(self.base, fn) + try: + if os.path.islink(fn) or os.path.isfile(fn): + os.remove(fn) + elif os.path.isdir(fn): + shutil.rmtree(fn) + except Exception: + not_removed.append(fn) + return not_removed + + +class EventMixin(object): + """ + A very simple publish/subscribe system. + """ + def __init__(self): + self._subscribers = {} + + def add(self, event, subscriber, append=True): + """ + Add a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be added (and called when the + event is published). + :param append: Whether to append or prepend the subscriber to an + existing subscriber list for the event. + """ + subs = self._subscribers + if event not in subs: + subs[event] = deque([subscriber]) + else: + sq = subs[event] + if append: + sq.append(subscriber) + else: + sq.appendleft(subscriber) + + def remove(self, event, subscriber): + """ + Remove a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be removed. + """ + subs = self._subscribers + if event not in subs: + raise ValueError('No subscribers: %r' % event) + subs[event].remove(subscriber) + + def get_subscribers(self, event): + """ + Return an iterator for the subscribers for an event. + :param event: The event to return subscribers for. + """ + return iter(self._subscribers.get(event, ())) + + def publish(self, event, *args, **kwargs): + """ + Publish a event and return a list of values returned by its + subscribers. + + :param event: The event to publish. + :param args: The positional arguments to pass to the event's + subscribers. + :param kwargs: The keyword arguments to pass to the event's + subscribers. + """ + result = [] + for subscriber in self.get_subscribers(event): + try: + value = subscriber(event, *args, **kwargs) + except Exception: + logger.exception('Exception during event publication') + value = None + result.append(value) + logger.debug('publish %s: args = %s, kwargs = %s, result = %s', + event, args, kwargs, result) + return result + +# +# Simple sequencing +# +class Sequencer(object): + def __init__(self): + self._preds = {} + self._succs = {} + self._nodes = set() # nodes with no preds/succs + + def add_node(self, node): + self._nodes.add(node) + + def remove_node(self, node, edges=False): + if node in self._nodes: + self._nodes.remove(node) + if edges: + for p in set(self._preds.get(node, ())): + self.remove(p, node) + for s in set(self._succs.get(node, ())): + self.remove(node, s) + # Remove empties + for k, v in list(self._preds.items()): + if not v: + del self._preds[k] + for k, v in list(self._succs.items()): + if not v: + del self._succs[k] + + def add(self, pred, succ): + assert pred != succ + self._preds.setdefault(succ, set()).add(pred) + self._succs.setdefault(pred, set()).add(succ) + + def remove(self, pred, succ): + assert pred != succ + try: + preds = self._preds[succ] + succs = self._succs[pred] + except KeyError: + raise ValueError('%r not a successor of anything' % succ) + try: + preds.remove(pred) + succs.remove(succ) + except KeyError: + raise ValueError('%r not a successor of %r' % (succ, pred)) + + def is_step(self, step): + return (step in self._preds or step in self._succs or + step in self._nodes) + + def get_steps(self, final): + if not self.is_step(final): + raise ValueError('Unknown: %r' % final) + result = [] + todo = [] + seen = set() + todo.append(final) + while todo: + step = todo.pop(0) + if step in seen: + # if a step was already seen, + # move it to the end (so it will appear earlier + # when reversed on return) ... but not for the + # final step, as that would be confusing for + # users + if step != final: + result.remove(step) + result.append(step) + else: + seen.add(step) + result.append(step) + preds = self._preds.get(step, ()) + todo.extend(preds) + return reversed(result) + + @property + def strong_connections(self): + #http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm + index_counter = [0] + stack = [] + lowlinks = {} + index = {} + result = [] + + graph = self._succs + + def strongconnect(node): + # set the depth index for this node to the smallest unused index + index[node] = index_counter[0] + lowlinks[node] = index_counter[0] + index_counter[0] += 1 + stack.append(node) + + # Consider successors + try: + successors = graph[node] + except Exception: + successors = [] + for successor in successors: + if successor not in lowlinks: + # Successor has not yet been visited + strongconnect(successor) + lowlinks[node] = min(lowlinks[node],lowlinks[successor]) + elif successor in stack: + # the successor is in the stack and hence in the current + # strongly connected component (SCC) + lowlinks[node] = min(lowlinks[node],index[successor]) + + # If `node` is a root node, pop the stack and generate an SCC + if lowlinks[node] == index[node]: + connected_component = [] + + while True: + successor = stack.pop() + connected_component.append(successor) + if successor == node: break + component = tuple(connected_component) + # storing the result + result.append(component) + + for node in graph: + if node not in lowlinks: + strongconnect(node) + + return result + + @property + def dot(self): + result = ['digraph G {'] + for succ in self._preds: + preds = self._preds[succ] + for pred in preds: + result.append(' %s -> %s;' % (pred, succ)) + for node in self._nodes: + result.append(' %s;' % node) + result.append('}') + return '\n'.join(result) + +# +# Unarchiving functionality for zip, tar, tgz, tbz, whl +# + +ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', + '.tgz', '.tbz', '.whl') + +def unarchive(archive_filename, dest_dir, format=None, check=True): + + def check_path(path): + if not isinstance(path, text_type): + path = path.decode('utf-8') + p = os.path.abspath(os.path.join(dest_dir, path)) + if not p.startswith(dest_dir) or p[plen] != os.sep: + raise ValueError('path outside destination: %r' % p) + + dest_dir = os.path.abspath(dest_dir) + plen = len(dest_dir) + archive = None + if format is None: + if archive_filename.endswith(('.zip', '.whl')): + format = 'zip' + elif archive_filename.endswith(('.tar.gz', '.tgz')): + format = 'tgz' + mode = 'r:gz' + elif archive_filename.endswith(('.tar.bz2', '.tbz')): + format = 'tbz' + mode = 'r:bz2' + elif archive_filename.endswith('.tar'): + format = 'tar' + mode = 'r' + else: + raise ValueError('Unknown format for %r' % archive_filename) + try: + if format == 'zip': + archive = ZipFile(archive_filename, 'r') + if check: + names = archive.namelist() + for name in names: + check_path(name) + else: + archive = tarfile.open(archive_filename, mode) + if check: + names = archive.getnames() + for name in names: + check_path(name) + if format != 'zip' and sys.version_info[0] < 3: + # See Python issue 17153. If the dest path contains Unicode, + # tarfile extraction fails on Python 2.x if a member path name + # contains non-ASCII characters - it leads to an implicit + # bytes -> unicode conversion using ASCII to decode. + for tarinfo in archive.getmembers(): + if not isinstance(tarinfo.name, text_type): + tarinfo.name = tarinfo.name.decode('utf-8') + archive.extractall(dest_dir) + + finally: + if archive: + archive.close() + + +def zip_dir(directory): + """zip a directory tree into a BytesIO object""" + result = io.BytesIO() + dlen = len(directory) + with ZipFile(result, "w") as zf: + for root, dirs, files in os.walk(directory): + for name in files: + full = os.path.join(root, name) + rel = root[dlen:] + dest = os.path.join(rel, name) + zf.write(full, dest) + return result + +# +# Simple progress bar +# + +UNITS = ('', 'K', 'M', 'G','T','P') + + +class Progress(object): + unknown = 'UNKNOWN' + + def __init__(self, minval=0, maxval=100): + assert maxval is None or maxval >= minval + self.min = self.cur = minval + self.max = maxval + self.started = None + self.elapsed = 0 + self.done = False + + def update(self, curval): + assert self.min <= curval + assert self.max is None or curval <= self.max + self.cur = curval + now = time.time() + if self.started is None: + self.started = now + else: + self.elapsed = now - self.started + + def increment(self, incr): + assert incr >= 0 + self.update(self.cur + incr) + + def start(self): + self.update(self.min) + return self + + def stop(self): + if self.max is not None: + self.update(self.max) + self.done = True + + @property + def maximum(self): + return self.unknown if self.max is None else self.max + + @property + def percentage(self): + if self.done: + result = '100 %' + elif self.max is None: + result = ' ?? %' + else: + v = 100.0 * (self.cur - self.min) / (self.max - self.min) + result = '%3d %%' % v + return result + + def format_duration(self, duration): + if (duration <= 0) and self.max is None or self.cur == self.min: + result = '??:??:??' + #elif duration < 1: + # result = '--:--:--' + else: + result = time.strftime('%H:%M:%S', time.gmtime(duration)) + return result + + @property + def ETA(self): + if self.done: + prefix = 'Done' + t = self.elapsed + #import pdb; pdb.set_trace() + else: + prefix = 'ETA ' + if self.max is None: + t = -1 + elif self.elapsed == 0 or (self.cur == self.min): + t = 0 + else: + #import pdb; pdb.set_trace() + t = float(self.max - self.min) + t /= self.cur - self.min + t = (t - 1) * self.elapsed + return '%s: %s' % (prefix, self.format_duration(t)) + + @property + def speed(self): + if self.elapsed == 0: + result = 0.0 + else: + result = (self.cur - self.min) / self.elapsed + for unit in UNITS: + if result < 1000: + break + result /= 1000.0 + return '%d %sB/s' % (result, unit) + +# +# Glob functionality +# + +RICH_GLOB = re.compile(r'\{([^}]*)\}') +_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') +_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') + + +def iglob(path_glob): + """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" + if _CHECK_RECURSIVE_GLOB.search(path_glob): + msg = """invalid glob %r: recursive glob "**" must be used alone""" + raise ValueError(msg % path_glob) + if _CHECK_MISMATCH_SET.search(path_glob): + msg = """invalid glob %r: mismatching set marker '{' or '}'""" + raise ValueError(msg % path_glob) + return _iglob(path_glob) + + +def _iglob(path_glob): + rich_path_glob = RICH_GLOB.split(path_glob, 1) + if len(rich_path_glob) > 1: + assert len(rich_path_glob) == 3, rich_path_glob + prefix, set, suffix = rich_path_glob + for item in set.split(','): + for path in _iglob(''.join((prefix, item, suffix))): + yield path + else: + if '**' not in path_glob: + for item in std_iglob(path_glob): + yield item + else: + prefix, radical = path_glob.split('**', 1) + if prefix == '': + prefix = '.' + if radical == '': + radical = '*' + else: + # we support both + radical = radical.lstrip('/') + radical = radical.lstrip('\\') + for path, dir, files in os.walk(prefix): + path = os.path.normpath(path) + for fn in _iglob(os.path.join(path, radical)): + yield fn + + + +# +# HTTPSConnection which verifies certificates/matches domains +# + +class HTTPSConnection(httplib.HTTPSConnection): + ca_certs = None # set this to the path to the certs file (.pem) + check_domain = True # only used if ca_certs is not None + + # noinspection PyPropertyAccess + def connect(self): + sock = socket.create_connection((self.host, self.port), self.timeout) + if getattr(self, '_tunnel_host', False): + self.sock = sock + self._tunnel() + + if not hasattr(ssl, 'SSLContext'): + # For 2.x + if self.ca_certs: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, + cert_reqs=cert_reqs, + ssl_version=ssl.PROTOCOL_SSLv23, + ca_certs=self.ca_certs) + else: + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + context.options |= ssl.OP_NO_SSLv2 + if self.cert_file: + context.load_cert_chain(self.cert_file, self.key_file) + kwargs = {} + if self.ca_certs: + context.verify_mode = ssl.CERT_REQUIRED + context.load_verify_locations(cafile=self.ca_certs) + if getattr(ssl, 'HAS_SNI', False): + kwargs['server_hostname'] = self.host + self.sock = context.wrap_socket(sock, **kwargs) + if self.ca_certs and self.check_domain: + try: + match_hostname(self.sock.getpeercert(), self.host) + logger.debug('Host verified: %s', self.host) + except CertificateError: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + +class HTTPSHandler(BaseHTTPSHandler): + def __init__(self, ca_certs, check_domain=True): + BaseHTTPSHandler.__init__(self) + self.ca_certs = ca_certs + self.check_domain = check_domain + + def _conn_maker(self, *args, **kwargs): + """ + This is called to create a connection instance. Normally you'd + pass a connection class to do_open, but it doesn't actually check for + a class, and just expects a callable. As long as we behave just as a + constructor would have, we should be OK. If it ever changes so that + we *must* pass a class, we'll create an UnsafeHTTPSConnection class + which just sets check_domain to False in the class definition, and + choose which one to pass to do_open. + """ + result = HTTPSConnection(*args, **kwargs) + if self.ca_certs: + result.ca_certs = self.ca_certs + result.check_domain = self.check_domain + return result + + def https_open(self, req): + try: + return self.do_open(self._conn_maker, req) + except URLError as e: + if 'certificate verify failed' in str(e.reason): + raise CertificateError('Unable to verify server certificate ' + 'for %s' % req.host) + else: + raise + +# +# To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- +# Middle proxy using HTTP listens on port 443, or an index mistakenly serves +# HTML containing a http://xyz link when it should be https://xyz), +# you can use the following handler class, which does not allow HTTP traffic. +# +# It works by inheriting from HTTPHandler - so build_opener won't add a +# handler for HTTP itself. +# +class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): + def http_open(self, req): + raise URLError('Unexpected HTTP request on what should be a secure ' + 'connection: %s' % req) + +# +# XML-RPC with timeouts +# + +_ver_info = sys.version_info[:2] + +if _ver_info == (2, 6): + class HTTP(httplib.HTTP): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + + class HTTPS(httplib.HTTPS): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + +class Transport(xmlrpclib.Transport): + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.Transport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, x509 = self.get_host_info(host) + if _ver_info == (2, 6): + result = HTTP(h, timeout=self.timeout) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPConnection(h) + result = self._connection[1] + return result + +class SafeTransport(xmlrpclib.SafeTransport): + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.SafeTransport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, kwargs = self.get_host_info(host) + if not kwargs: + kwargs = {} + kwargs['timeout'] = self.timeout + if _ver_info == (2, 6): + result = HTTPS(host, None, **kwargs) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPSConnection(h, None, + **kwargs) + result = self._connection[1] + return result + + +class ServerProxy(xmlrpclib.ServerProxy): + def __init__(self, uri, **kwargs): + self.timeout = timeout = kwargs.pop('timeout', None) + # The above classes only come into play if a timeout + # is specified + if timeout is not None: + scheme, _ = splittype(uri) + use_datetime = kwargs.get('use_datetime', 0) + if scheme == 'https': + tcls = SafeTransport + else: + tcls = Transport + kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) + self.transport = t + xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) + +# +# CSV functionality. This is provided because on 2.x, the csv module can't +# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. +# + +def _csv_open(fn, mode, **kwargs): + if sys.version_info[0] < 3: + mode += 'b' + else: + kwargs['newline'] = '' + return open(fn, mode, **kwargs) + + +class CSVBase(object): + defaults = { + 'delimiter': str(','), # The strs are used because we need native + 'quotechar': str('"'), # str in the csv API (2.x won't take + 'lineterminator': str('\n') # Unicode) + } + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.stream.close() + + +class CSVReader(CSVBase): + def __init__(self, **kwargs): + if 'stream' in kwargs: + stream = kwargs['stream'] + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + self.stream = stream + else: + self.stream = _csv_open(kwargs['path'], 'r') + self.reader = csv.reader(self.stream, **self.defaults) + + def __iter__(self): + return self + + def next(self): + result = next(self.reader) + if sys.version_info[0] < 3: + for i, item in enumerate(result): + if not isinstance(item, text_type): + result[i] = item.decode('utf-8') + return result + + __next__ = next + +class CSVWriter(CSVBase): + def __init__(self, fn, **kwargs): + self.stream = _csv_open(fn, 'w') + self.writer = csv.writer(self.stream, **self.defaults) + + def writerow(self, row): + if sys.version_info[0] < 3: + r = [] + for item in row: + if isinstance(item, text_type): + item = item.encode('utf-8') + r.append(item) + row = r + self.writer.writerow(row) + +# +# Configurator functionality +# + +class Configurator(BaseConfigurator): + + value_converters = dict(BaseConfigurator.value_converters) + value_converters['inc'] = 'inc_convert' + + def __init__(self, config, base=None): + super(Configurator, self).__init__(config) + self.base = base or os.getcwd() + + def configure_custom(self, config): + def convert(o): + if isinstance(o, (list, tuple)): + result = type(o)([convert(i) for i in o]) + elif isinstance(o, dict): + if '()' in o: + result = self.configure_custom(o) + else: + result = {} + for k in o: + result[k] = convert(o[k]) + else: + result = self.convert(o) + return result + + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + args = config.pop('[]', ()) + if args: + args = tuple([convert(o) for o in args]) + items = [(k, convert(config[k])) for k in config if valid_ident(k)] + kwargs = dict(items) + result = c(*args, **kwargs) + if props: + for n, v in props.items(): + setattr(result, n, convert(v)) + return result + + def __getitem__(self, key): + result = self.config[key] + if isinstance(result, dict) and '()' in result: + self.config[key] = result = self.configure_custom(result) + return result + + def inc_convert(self, value): + """Default converter for the inc:// protocol.""" + if not os.path.isabs(value): + value = os.path.join(self.base, value) + with codecs.open(value, 'r', encoding='utf-8') as f: + result = json.load(f) + return result + +# +# Mixin for running subprocesses and capturing their output +# + +class SubprocessMixin(object): + def __init__(self, verbose=False, progress=None): + self.verbose = verbose + self.progress = progress + + def reader(self, stream, context): + """ + Read lines from a subprocess' output stream and either pass to a progress + callable (if specified) or write progress information to sys.stderr. + """ + progress = self.progress + verbose = self.verbose + while True: + s = stream.readline() + if not s: + break + if progress is not None: + progress(s, context) + else: + if not verbose: + sys.stderr.write('.') + else: + sys.stderr.write(s.decode('utf-8')) + sys.stderr.flush() + stream.close() + + def run_command(self, cmd, **kwargs): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, **kwargs) + t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) + t1.start() + t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) + t2.start() + p.wait() + t1.join() + t2.join() + if self.progress is not None: + self.progress('done.', 'main') + elif self.verbose: + sys.stderr.write('done.\n') + return p diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/version.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/version.py new file mode 100644 index 0000000..d9c438a --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/version.py @@ -0,0 +1,742 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2014 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Implementation of a flexible versioning scheme providing support for PEP-386, +distribute-compatible and semantic versioning. +""" + +import logging +import re + +from .compat import string_types + +__all__ = ['NormalizedVersion', 'NormalizedMatcher', + 'LegacyVersion', 'LegacyMatcher', + 'SemanticVersion', 'SemanticMatcher', + 'UnsupportedVersionError', 'get_scheme'] + +logger = logging.getLogger(__name__) + + +class UnsupportedVersionError(ValueError): + """This is an unsupported version.""" + pass + + +class Version(object): + def __init__(self, s): + self._string = s = s.strip() + self._parts = parts = self.parse(s) + assert isinstance(parts, tuple) + assert len(parts) > 0 + + def parse(self, s): + raise NotImplementedError('please implement in a subclass') + + def _check_compatible(self, other): + if type(self) != type(other): + raise TypeError('cannot compare %r and %r' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + self._check_compatible(other) + return self._parts < other._parts + + def __gt__(self, other): + return not (self.__lt__(other) or self.__eq__(other)) + + def __le__(self, other): + return self.__lt__(other) or self.__eq__(other) + + def __ge__(self, other): + return self.__gt__(other) or self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self._parts) + + def __repr__(self): + return "%s('%s')" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + @property + def is_prerelease(self): + raise NotImplementedError('Please implement in subclasses.') + + +class Matcher(object): + version_class = None + + dist_re = re.compile(r"^(\w[\s\w'.-]*)(\((.*)\))?") + comp_re = re.compile(r'^(<=|>=|<|>|!=|={2,3}|~=)?\s*([^\s,]+)$') + num_re = re.compile(r'^\d+(\.\d+)*$') + + # value is either a callable or the name of a method + _operators = { + '<': lambda v, c, p: v < c, + '>': lambda v, c, p: v > c, + '<=': lambda v, c, p: v == c or v < c, + '>=': lambda v, c, p: v == c or v > c, + '==': lambda v, c, p: v == c, + '===': lambda v, c, p: v == c, + # by default, compatible => >=. + '~=': lambda v, c, p: v == c or v > c, + '!=': lambda v, c, p: v != c, + } + + def __init__(self, s): + if self.version_class is None: + raise ValueError('Please specify a version class') + self._string = s = s.strip() + m = self.dist_re.match(s) + if not m: + raise ValueError('Not valid: %r' % s) + groups = m.groups('') + self.name = groups[0].strip() + self.key = self.name.lower() # for case-insensitive comparisons + clist = [] + if groups[2]: + constraints = [c.strip() for c in groups[2].split(',')] + for c in constraints: + m = self.comp_re.match(c) + if not m: + raise ValueError('Invalid %r in %r' % (c, s)) + groups = m.groups() + op = groups[0] or '~=' + s = groups[1] + if s.endswith('.*'): + if op not in ('==', '!='): + raise ValueError('\'.*\' not allowed for ' + '%r constraints' % op) + # Could be a partial version (e.g. for '2.*') which + # won't parse as a version, so keep it as a string + vn, prefix = s[:-2], True + if not self.num_re.match(vn): + # Just to check that vn is a valid version + self.version_class(vn) + else: + # Should parse as a version, so we can create an + # instance for the comparison + vn, prefix = self.version_class(s), False + clist.append((op, vn, prefix)) + self._parts = tuple(clist) + + def match(self, version): + """ + Check if the provided version matches the constraints. + + :param version: The version to match against this instance. + :type version: Strring or :class:`Version` instance. + """ + if isinstance(version, string_types): + version = self.version_class(version) + for operator, constraint, prefix in self._parts: + f = self._operators.get(operator) + if isinstance(f, string_types): + f = getattr(self, f) + if not f: + msg = ('%r not implemented ' + 'for %s' % (operator, self.__class__.__name__)) + raise NotImplementedError(msg) + if not f(version, constraint, prefix): + return False + return True + + @property + def exact_version(self): + result = None + if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): + result = self._parts[0][1] + return result + + def _check_compatible(self, other): + if type(self) != type(other) or self.name != other.name: + raise TypeError('cannot compare %s and %s' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self.key == other.key and self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self.key) + hash(self._parts) + + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + +PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?' + r'(\.(post)(\d+))?(\.(dev)(\d+))?' + r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$') + + +def _pep_440_key(s): + s = s.strip() + m = PEP440_VERSION_RE.match(s) + if not m: + raise UnsupportedVersionError('Not a valid version: %s' % s) + groups = m.groups() + nums = tuple(int(v) for v in groups[1].split('.')) + while len(nums) > 1 and nums[-1] == 0: + nums = nums[:-1] + + if not groups[0]: + epoch = 0 + else: + epoch = int(groups[0]) + pre = groups[4:6] + post = groups[7:9] + dev = groups[10:12] + local = groups[13] + if pre == (None, None): + pre = () + else: + pre = pre[0], int(pre[1]) + if post == (None, None): + post = () + else: + post = post[0], int(post[1]) + if dev == (None, None): + dev = () + else: + dev = dev[0], int(dev[1]) + if local is None: + local = () + else: + parts = [] + for part in local.split('.'): + # to ensure that numeric compares as > lexicographic, avoid + # comparing them directly, but encode a tuple which ensures + # correct sorting + if part.isdigit(): + part = (1, int(part)) + else: + part = (0, part) + parts.append(part) + local = tuple(parts) + if not pre: + # either before pre-release, or final release and after + if not post and dev: + # before pre-release + pre = ('a', -1) # to sort before a0 + else: + pre = ('z',) # to sort after all pre-releases + # now look at the state of post and dev. + if not post: + post = ('_',) # sort before 'a' + if not dev: + dev = ('final',) + + #print('%s -> %s' % (s, m.groups())) + return epoch, nums, pre, post, dev, local + + +_normalized_key = _pep_440_key + + +class NormalizedVersion(Version): + """A rational version. + + Good: + 1.2 # equivalent to "1.2.0" + 1.2.0 + 1.2a1 + 1.2.3a2 + 1.2.3b1 + 1.2.3c1 + 1.2.3.4 + TODO: fill this out + + Bad: + 1 # mininum two numbers + 1.2a # release level must have a release serial + 1.2.3b + """ + def parse(self, s): + result = _normalized_key(s) + # _normalized_key loses trailing zeroes in the release + # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 + # However, PEP 440 prefix matching needs it: for example, + # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). + m = PEP440_VERSION_RE.match(s) # must succeed + groups = m.groups() + self._release_clause = tuple(int(v) for v in groups[1].split('.')) + return result + + PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) + + @property + def is_prerelease(self): + return any(t[0] in self.PREREL_TAGS for t in self._parts if t) + + +def _match_prefix(x, y): + x = str(x) + y = str(y) + if x == y: + return True + if not x.startswith(y): + return False + n = len(y) + return x[n] == '.' + + +class NormalizedMatcher(Matcher): + version_class = NormalizedVersion + + # value is either a callable or the name of a method + _operators = { + '~=': '_match_compatible', + '<': '_match_lt', + '>': '_match_gt', + '<=': '_match_le', + '>=': '_match_ge', + '==': '_match_eq', + '===': '_match_arbitrary', + '!=': '_match_ne', + } + + def _adjust_local(self, version, constraint, prefix): + if prefix: + strip_local = '+' not in constraint and version._parts[-1] + else: + # both constraint and version are + # NormalizedVersion instances. + # If constraint does not have a local component, + # ensure the version doesn't, either. + strip_local = not constraint._parts[-1] and version._parts[-1] + if strip_local: + s = version._string.split('+', 1)[0] + version = self.version_class(s) + return version, constraint + + def _match_lt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version >= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_gt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version <= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_le(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version <= constraint + + def _match_ge(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version >= constraint + + def _match_eq(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version == constraint) + else: + result = _match_prefix(version, constraint) + return result + + def _match_arbitrary(self, version, constraint, prefix): + return str(version) == str(constraint) + + def _match_ne(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version != constraint) + else: + result = not _match_prefix(version, constraint) + return result + + def _match_compatible(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version == constraint: + return True + if version < constraint: + return False +# if not prefix: +# return True + release_clause = constraint._release_clause + if len(release_clause) > 1: + release_clause = release_clause[:-1] + pfx = '.'.join([str(i) for i in release_clause]) + return _match_prefix(version, pfx) + +_REPLACEMENTS = ( + (re.compile('[.+-]$'), ''), # remove trailing puncts + (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start + (re.compile('^[.-]'), ''), # remove leading puncts + (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses + (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha + (re.compile(r'\b(pre-alpha|prealpha)\b'), + 'pre.alpha'), # standardise + (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses +) + +_SUFFIX_REPLACEMENTS = ( + (re.compile('^[:~._+-]+'), ''), # remove leading puncts + (re.compile('[,*")([\]]'), ''), # remove unwanted chars + (re.compile('[~:+_ -]'), '.'), # replace illegal chars + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\.$'), ''), # trailing '.' +) + +_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') + + +def _suggest_semantic_version(s): + """ + Try to suggest a semantic form for a version for which + _suggest_normalized_version couldn't come up with anything. + """ + result = s.strip().lower() + for pat, repl in _REPLACEMENTS: + result = pat.sub(repl, result) + if not result: + result = '0.0.0' + + # Now look for numeric prefix, and separate it out from + # the rest. + #import pdb; pdb.set_trace() + m = _NUMERIC_PREFIX.match(result) + if not m: + prefix = '0.0.0' + suffix = result + else: + prefix = m.groups()[0].split('.') + prefix = [int(i) for i in prefix] + while len(prefix) < 3: + prefix.append(0) + if len(prefix) == 3: + suffix = result[m.end():] + else: + suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] + prefix = prefix[:3] + prefix = '.'.join([str(i) for i in prefix]) + suffix = suffix.strip() + if suffix: + #import pdb; pdb.set_trace() + # massage the suffix. + for pat, repl in _SUFFIX_REPLACEMENTS: + suffix = pat.sub(repl, suffix) + + if not suffix: + result = prefix + else: + sep = '-' if 'dev' in suffix else '+' + result = prefix + sep + suffix + if not is_semver(result): + result = None + return result + + +def _suggest_normalized_version(s): + """Suggest a normalized version close to the given version string. + + If you have a version string that isn't rational (i.e. NormalizedVersion + doesn't like it) then you might be able to get an equivalent (or close) + rational version from this function. + + This does a number of simple normalizations to the given string, based + on observation of versions currently in use on PyPI. Given a dump of + those version during PyCon 2009, 4287 of them: + - 2312 (53.93%) match NormalizedVersion without change + with the automatic suggestion + - 3474 (81.04%) match when using this suggestion method + + @param s {str} An irrational version string. + @returns A rational version string, or None, if couldn't determine one. + """ + try: + _normalized_key(s) + return s # already rational + except UnsupportedVersionError: + pass + + rs = s.lower() + + # part of this could use maketrans + for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), + ('beta', 'b'), ('rc', 'c'), ('-final', ''), + ('-pre', 'c'), + ('-release', ''), ('.release', ''), ('-stable', ''), + ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), + ('final', '')): + rs = rs.replace(orig, repl) + + # if something ends with dev or pre, we add a 0 + rs = re.sub(r"pre$", r"pre0", rs) + rs = re.sub(r"dev$", r"dev0", rs) + + # if we have something like "b-2" or "a.2" at the end of the + # version, that is pobably beta, alpha, etc + # let's remove the dash or dot + rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) + + # 1.0-dev-r371 -> 1.0.dev371 + # 0.1-dev-r79 -> 0.1.dev79 + rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) + + # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 + rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) + + # Clean: v0.3, v1.0 + if rs.startswith('v'): + rs = rs[1:] + + # Clean leading '0's on numbers. + #TODO: unintended side-effect on, e.g., "2003.05.09" + # PyPI stats: 77 (~2%) better + rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) + + # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers + # zero. + # PyPI stats: 245 (7.56%) better + rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) + + # the 'dev-rNNN' tag is a dev tag + rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) + + # clean the - when used as a pre delimiter + rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) + + # a terminal "dev" or "devel" can be changed into ".dev0" + rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) + + # a terminal "dev" can be changed into ".dev0" + rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) + + # a terminal "final" or "stable" can be removed + rs = re.sub(r"(final|stable)$", "", rs) + + # The 'r' and the '-' tags are post release tags + # 0.4a1.r10 -> 0.4a1.post10 + # 0.9.33-17222 -> 0.9.33.post17222 + # 0.9.33-r17222 -> 0.9.33.post17222 + rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) + + # Clean 'r' instead of 'dev' usage: + # 0.9.33+r17222 -> 0.9.33.dev17222 + # 1.0dev123 -> 1.0.dev123 + # 1.0.git123 -> 1.0.dev123 + # 1.0.bzr123 -> 1.0.dev123 + # 0.1a0dev.123 -> 0.1a0.dev123 + # PyPI stats: ~150 (~4%) better + rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) + + # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: + # 0.2.pre1 -> 0.2c1 + # 0.2-c1 -> 0.2c1 + # 1.0preview123 -> 1.0c123 + # PyPI stats: ~21 (0.62%) better + rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) + + # Tcl/Tk uses "px" for their post release markers + rs = re.sub(r"p(\d+)$", r".post\1", rs) + + try: + _normalized_key(rs) + except UnsupportedVersionError: + rs = None + return rs + +# +# Legacy version processing (distribute-compatible) +# + +_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) +_VERSION_REPLACE = { + 'pre': 'c', + 'preview': 'c', + '-': 'final-', + 'rc': 'c', + 'dev': '@', + '': None, + '.': None, +} + + +def _legacy_key(s): + def get_parts(s): + result = [] + for p in _VERSION_PART.split(s.lower()): + p = _VERSION_REPLACE.get(p, p) + if p: + if '0' <= p[:1] <= '9': + p = p.zfill(8) + else: + p = '*' + p + result.append(p) + result.append('*final') + return result + + result = [] + for p in get_parts(s): + if p.startswith('*'): + if p < '*final': + while result and result[-1] == '*final-': + result.pop() + while result and result[-1] == '00000000': + result.pop() + result.append(p) + return tuple(result) + + +class LegacyVersion(Version): + def parse(self, s): + return _legacy_key(s) + + @property + def is_prerelease(self): + result = False + for x in self._parts: + if (isinstance(x, string_types) and x.startswith('*') and + x < '*final'): + result = True + break + return result + + +class LegacyMatcher(Matcher): + version_class = LegacyVersion + + _operators = dict(Matcher._operators) + _operators['~='] = '_match_compatible' + + numeric_re = re.compile('^(\d+(\.\d+)*)') + + def _match_compatible(self, version, constraint, prefix): + if version < constraint: + return False + m = self.numeric_re.match(str(constraint)) + if not m: + logger.warning('Cannot compute compatible match for version %s ' + ' and constraint %s', version, constraint) + return True + s = m.groups()[0] + if '.' in s: + s = s.rsplit('.', 1)[0] + return _match_prefix(version, s) + +# +# Semantic versioning +# + +_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' + r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' + r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) + + +def is_semver(s): + return _SEMVER_RE.match(s) + + +def _semantic_key(s): + def make_tuple(s, absent): + if s is None: + result = (absent,) + else: + parts = s[1:].split('.') + # We can't compare ints and strings on Python 3, so fudge it + # by zero-filling numeric values so simulate a numeric comparison + result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) + return result + + m = is_semver(s) + if not m: + raise UnsupportedVersionError(s) + groups = m.groups() + major, minor, patch = [int(i) for i in groups[:3]] + # choose the '|' and '*' so that versions sort correctly + pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') + return (major, minor, patch), pre, build + + +class SemanticVersion(Version): + def parse(self, s): + return _semantic_key(s) + + @property + def is_prerelease(self): + return self._parts[1][0] != '|' + + +class SemanticMatcher(Matcher): + version_class = SemanticVersion + + +class VersionScheme(object): + def __init__(self, key, matcher, suggester=None): + self.key = key + self.matcher = matcher + self.suggester = suggester + + def is_valid_version(self, s): + try: + self.matcher.version_class(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_matcher(self, s): + try: + self.matcher(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_constraint_list(self, s): + """ + Used for processing some metadata fields + """ + return self.is_valid_matcher('dummy_name (%s)' % s) + + def suggest(self, s): + if self.suggester is None: + result = None + else: + result = self.suggester(s) + return result + +_SCHEMES = { + 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, + _suggest_normalized_version), + 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), + 'semantic': VersionScheme(_semantic_key, SemanticMatcher, + _suggest_semantic_version), +} + +_SCHEMES['default'] = _SCHEMES['normalized'] + + +def get_scheme(name): + if name not in _SCHEMES: + raise ValueError('unknown scheme name: %r' % name) + return _SCHEMES[name] diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/w32.exe b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/w32.exe new file mode 100644 index 0000000..f27573a Binary files /dev/null and b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/w32.exe differ diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/w64.exe b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/w64.exe new file mode 100644 index 0000000..fd37d9e Binary files /dev/null and b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/w64.exe differ diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/wheel.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/wheel.py new file mode 100644 index 0000000..a537681 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/distlib/wheel.py @@ -0,0 +1,976 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2014 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import base64 +import codecs +import datetime +import distutils.util +from email import message_from_file +import hashlib +import imp +import json +import logging +import os +import posixpath +import re +import shutil +import sys +import tempfile +import zipfile + +from . import __version__, DistlibException +from .compat import sysconfig, ZipFile, fsdecode, text_type, filter +from .database import InstalledDistribution +from .metadata import Metadata, METADATA_FILENAME +from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, + cached_property, get_cache_base, read_exports, tempdir) +from .version import NormalizedVersion, UnsupportedVersionError + +logger = logging.getLogger(__name__) + +cache = None # created when needed + +if hasattr(sys, 'pypy_version_info'): + IMP_PREFIX = 'pp' +elif sys.platform.startswith('java'): + IMP_PREFIX = 'jy' +elif sys.platform == 'cli': + IMP_PREFIX = 'ip' +else: + IMP_PREFIX = 'cp' + +VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') +if not VER_SUFFIX: # pragma: no cover + VER_SUFFIX = '%s%s' % sys.version_info[:2] +PYVER = 'py' + VER_SUFFIX +IMPVER = IMP_PREFIX + VER_SUFFIX + +ARCH = distutils.util.get_platform().replace('-', '_').replace('.', '_') + +ABI = sysconfig.get_config_var('SOABI') +if ABI and ABI.startswith('cpython-'): + ABI = ABI.replace('cpython-', 'cp') +else: + def _derive_abi(): + parts = ['cp', VER_SUFFIX] + if sysconfig.get_config_var('Py_DEBUG'): + parts.append('d') + if sysconfig.get_config_var('WITH_PYMALLOC'): + parts.append('m') + if sysconfig.get_config_var('Py_UNICODE_SIZE') == 4: + parts.append('u') + return ''.join(parts) + ABI = _derive_abi() + del _derive_abi + +FILENAME_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))? +-(?P\w+\d+(\.\w+\d+)*) +-(?P\w+) +-(?P\w+(\.\w+)*) +\.whl$ +''', re.IGNORECASE | re.VERBOSE) + +NAME_VERSION_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))?$ +''', re.IGNORECASE | re.VERBOSE) + +SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') +SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') +SHEBANG_PYTHON = b'#!python' +SHEBANG_PYTHONW = b'#!pythonw' + +if os.sep == '/': + to_posix = lambda o: o +else: + to_posix = lambda o: o.replace(os.sep, '/') + + +class Mounter(object): + def __init__(self): + self.impure_wheels = {} + self.libs = {} + + def add(self, pathname, extensions): + self.impure_wheels[pathname] = extensions + self.libs.update(extensions) + + def remove(self, pathname): + extensions = self.impure_wheels.pop(pathname) + for k, v in extensions: + if k in self.libs: + del self.libs[k] + + def find_module(self, fullname, path=None): + if fullname in self.libs: + result = self + else: + result = None + return result + + def load_module(self, fullname): + if fullname in sys.modules: + result = sys.modules[fullname] + else: + if fullname not in self.libs: + raise ImportError('unable to find extension for %s' % fullname) + result = imp.load_dynamic(fullname, self.libs[fullname]) + result.__loader__ = self + parts = fullname.rsplit('.', 1) + if len(parts) > 1: + result.__package__ = parts[0] + return result + +_hook = Mounter() + + +class Wheel(object): + """ + Class to build and install from Wheel files (PEP 427). + """ + + wheel_version = (1, 1) + hash_kind = 'sha256' + + def __init__(self, filename=None, sign=False, verify=False): + """ + Initialise an instance using a (valid) filename. + """ + self.sign = sign + self.should_verify = verify + self.buildver = '' + self.pyver = [PYVER] + self.abi = ['none'] + self.arch = ['any'] + self.dirname = os.getcwd() + if filename is None: + self.name = 'dummy' + self.version = '0.1' + self._filename = self.filename + else: + m = NAME_VERSION_RE.match(filename) + if m: + info = m.groupdict('') + self.name = info['nm'] + # Reinstate the local version separator + self.version = info['vn'].replace('_', '-') + self.buildver = info['bn'] + self._filename = self.filename + else: + dirname, filename = os.path.split(filename) + m = FILENAME_RE.match(filename) + if not m: + raise DistlibException('Invalid name or ' + 'filename: %r' % filename) + if dirname: + self.dirname = os.path.abspath(dirname) + self._filename = filename + info = m.groupdict('') + self.name = info['nm'] + self.version = info['vn'] + self.buildver = info['bn'] + self.pyver = info['py'].split('.') + self.abi = info['bi'].split('.') + self.arch = info['ar'].split('.') + + @property + def filename(self): + """ + Build and return a filename from the various components. + """ + if self.buildver: + buildver = '-' + self.buildver + else: + buildver = '' + pyver = '.'.join(self.pyver) + abi = '.'.join(self.abi) + arch = '.'.join(self.arch) + # replace - with _ as a local version separator + version = self.version.replace('-', '_') + return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, + pyver, abi, arch) + + @property + def exists(self): + path = os.path.join(self.dirname, self.filename) + return os.path.isfile(path) + + @property + def tags(self): + for pyver in self.pyver: + for abi in self.abi: + for arch in self.arch: + yield pyver, abi, arch + + @cached_property + def metadata(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + wrapper = codecs.getreader('utf-8') + with ZipFile(pathname, 'r') as zf: + wheel_metadata = self.get_wheel_metadata(zf) + wv = wheel_metadata['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if file_version < (1, 1): + fn = 'METADATA' + else: + fn = METADATA_FILENAME + try: + metadata_filename = posixpath.join(info_dir, fn) + with zf.open(metadata_filename) as bf: + wf = wrapper(bf) + result = Metadata(fileobj=wf) + except KeyError: + raise ValueError('Invalid wheel, because %s is ' + 'missing' % fn) + return result + + def get_wheel_metadata(self, zf): + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + metadata_filename = posixpath.join(info_dir, 'WHEEL') + with zf.open(metadata_filename) as bf: + wf = codecs.getreader('utf-8')(bf) + message = message_from_file(wf) + return dict(message) + + @cached_property + def info(self): + pathname = os.path.join(self.dirname, self.filename) + with ZipFile(pathname, 'r') as zf: + result = self.get_wheel_metadata(zf) + return result + + def process_shebang(self, data): + m = SHEBANG_RE.match(data) + if m: + end = m.end() + shebang, data_after_shebang = data[:end], data[end:] + # Preserve any arguments after the interpreter + if b'pythonw' in shebang.lower(): + shebang_python = SHEBANG_PYTHONW + else: + shebang_python = SHEBANG_PYTHON + m = SHEBANG_DETAIL_RE.match(shebang) + if m: + args = b' ' + m.groups()[-1] + else: + args = b'' + shebang = shebang_python + args + data = shebang + data_after_shebang + else: + cr = data.find(b'\r') + lf = data.find(b'\n') + if cr < 0 or cr > lf: + term = b'\n' + else: + if data[cr:cr + 2] == b'\r\n': + term = b'\r\n' + else: + term = b'\r' + data = SHEBANG_PYTHON + term + data + return data + + def get_hash(self, data, hash_kind=None): + if hash_kind is None: + hash_kind = self.hash_kind + try: + hasher = getattr(hashlib, hash_kind) + except AttributeError: + raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) + result = hasher(data).digest() + result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') + return hash_kind, result + + def write_record(self, records, record_path, base): + with CSVWriter(record_path) as writer: + for row in records: + writer.writerow(row) + p = to_posix(os.path.relpath(record_path, base)) + writer.writerow((p, '', '')) + + def write_records(self, info, libdir, archive_paths): + records = [] + distinfo, info_dir = info + hasher = getattr(hashlib, self.hash_kind) + for ap, p in archive_paths: + with open(p, 'rb') as f: + data = f.read() + digest = '%s=%s' % self.get_hash(data) + size = os.path.getsize(p) + records.append((ap, digest, size)) + + p = os.path.join(distinfo, 'RECORD') + self.write_record(records, p, libdir) + ap = to_posix(os.path.join(info_dir, 'RECORD')) + archive_paths.append((ap, p)) + + def build_zip(self, pathname, archive_paths): + with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: + for ap, p in archive_paths: + logger.debug('Wrote %s to %s in wheel', p, ap) + zf.write(p, ap) + + def build(self, paths, tags=None, wheel_version=None): + """ + Build a wheel from files in specified paths, and use any specified tags + when determining the name of the wheel. + """ + if tags is None: + tags = {} + + libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] + if libkey == 'platlib': + is_pure = 'false' + default_pyver = [IMPVER] + default_abi = [ABI] + default_arch = [ARCH] + else: + is_pure = 'true' + default_pyver = [PYVER] + default_abi = ['none'] + default_arch = ['any'] + + self.pyver = tags.get('pyver', default_pyver) + self.abi = tags.get('abi', default_abi) + self.arch = tags.get('arch', default_arch) + + libdir = paths[libkey] + + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + archive_paths = [] + + # First, stuff which is not in site-packages + for key in ('data', 'headers', 'scripts'): + if key not in paths: + continue + path = paths[key] + if os.path.isdir(path): + for root, dirs, files in os.walk(path): + for fn in files: + p = fsdecode(os.path.join(root, fn)) + rp = os.path.relpath(p, path) + ap = to_posix(os.path.join(data_dir, key, rp)) + archive_paths.append((ap, p)) + if key == 'scripts' and not p.endswith('.exe'): + with open(p, 'rb') as f: + data = f.read() + data = self.process_shebang(data) + with open(p, 'wb') as f: + f.write(data) + + # Now, stuff which is in site-packages, other than the + # distinfo stuff. + path = libdir + distinfo = None + for root, dirs, files in os.walk(path): + if root == path: + # At the top level only, save distinfo for later + # and skip it for now + for i, dn in enumerate(dirs): + dn = fsdecode(dn) + if dn.endswith('.dist-info'): + distinfo = os.path.join(root, dn) + del dirs[i] + break + assert distinfo, '.dist-info directory expected, not found' + + for fn in files: + # comment out next suite to leave .pyc files in + if fsdecode(fn).endswith(('.pyc', '.pyo')): + continue + p = os.path.join(root, fn) + rp = to_posix(os.path.relpath(p, path)) + archive_paths.append((rp, p)) + + # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. + files = os.listdir(distinfo) + for fn in files: + if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): + p = fsdecode(os.path.join(distinfo, fn)) + ap = to_posix(os.path.join(info_dir, fn)) + archive_paths.append((ap, p)) + + wheel_metadata = [ + 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), + 'Generator: distlib %s' % __version__, + 'Root-Is-Purelib: %s' % is_pure, + ] + for pyver, abi, arch in self.tags: + wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) + p = os.path.join(distinfo, 'WHEEL') + with open(p, 'w') as f: + f.write('\n'.join(wheel_metadata)) + ap = to_posix(os.path.join(info_dir, 'WHEEL')) + archive_paths.append((ap, p)) + + # Now, at last, RECORD. + # Paths in here are archive paths - nothing else makes sense. + self.write_records((distinfo, info_dir), libdir, archive_paths) + # Now, ready to build the zip file + pathname = os.path.join(self.dirname, self.filename) + self.build_zip(pathname, archive_paths) + return pathname + + def install(self, paths, maker, **kwargs): + """ + Install a wheel to the specified paths. If kwarg ``warner`` is + specified, it should be a callable, which will be called with two + tuples indicating the wheel version of this software and the wheel + version in the file, if there is a discrepancy in the versions. + This can be used to issue any warnings to raise any exceptions. + If kwarg ``lib_only`` is True, only the purelib/platlib files are + installed, and the headers, scripts, data and dist-info metadata are + not written. + + The return value is a :class:`InstalledDistribution` instance unless + ``options.lib_only`` is True, in which case the return value is ``None``. + """ + + dry_run = maker.dry_run + warner = kwargs.get('warner') + lib_only = kwargs.get('lib_only', False) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if (file_version != self.wheel_version) and warner: + warner(self.wheel_version, file_version) + + if message['Root-Is-Purelib'] == 'true': + libdir = paths['purelib'] + else: + libdir = paths['platlib'] + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + data_pfx = posixpath.join(data_dir, '') + info_pfx = posixpath.join(info_dir, '') + script_pfx = posixpath.join(data_dir, 'scripts', '') + + # make a new instance rather than a copy of maker's, + # as we mutate it + fileop = FileOperator(dry_run=dry_run) + fileop.record = True # so we can rollback if needed + + bc = not sys.dont_write_bytecode # Double negatives. Lovely! + + outfiles = [] # for RECORD writing + + # for script copying/shebang processing + workdir = tempfile.mkdtemp() + # set target dir later + # we default add_launchers to False, as the + # Python Launcher should be used instead + maker.source_dir = workdir + maker.target_dir = None + try: + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + if u_arcname.endswith('/RECORD.jws'): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + if lib_only and u_arcname.startswith((info_pfx, data_pfx)): + logger.debug('lib_only: skipping %s', u_arcname) + continue + is_script = (u_arcname.startswith(script_pfx) + and not u_arcname.endswith('.exe')) + + if u_arcname.startswith(data_pfx): + _, where, rp = u_arcname.split('/', 2) + outfile = os.path.join(paths[where], convert_path(rp)) + else: + # meant for site-packages. + if u_arcname in (wheel_metadata_name, record_name): + continue + outfile = os.path.join(libdir, convert_path(u_arcname)) + if not is_script: + with zf.open(arcname) as bf: + fileop.copy_stream(bf, outfile) + outfiles.append(outfile) + # Double check the digest of the written file + if not dry_run and row[1]: + with open(outfile, 'rb') as bf: + data = bf.read() + _, newdigest = self.get_hash(data, kind) + if newdigest != digest: + raise DistlibException('digest mismatch ' + 'on write for ' + '%s' % outfile) + if bc and outfile.endswith('.py'): + try: + pyc = fileop.byte_compile(outfile) + outfiles.append(pyc) + except Exception: + # Don't give up if byte-compilation fails, + # but log it and perhaps warn the user + logger.warning('Byte-compilation failed', + exc_info=True) + else: + fn = os.path.basename(convert_path(arcname)) + workname = os.path.join(workdir, fn) + with zf.open(arcname) as bf: + fileop.copy_stream(bf, workname) + + dn, fn = os.path.split(outfile) + maker.target_dir = dn + filenames = maker.make(fn) + fileop.set_executable_mode(filenames) + outfiles.extend(filenames) + + if lib_only: + logger.debug('lib_only: returning None') + dist = None + else: + # Generate scripts + + # Try to get pydist.json so we can see if there are + # any commands to generate. If this fails (e.g. because + # of a legacy wheel), log a warning but don't give up. + commands = None + file_version = self.info['Wheel-Version'] + if file_version == '1.0': + # Use legacy info + ep = posixpath.join(info_dir, 'entry_points.txt') + try: + with zf.open(ep) as bwf: + epdata = read_exports(bwf) + commands = {} + for key in ('console', 'gui'): + k = '%s_scripts' % key + if k in epdata: + commands['wrap_%s' % key] = d = {} + for v in epdata[k].values(): + s = '%s:%s' % (v.prefix, v.suffix) + if v.flags: + s += ' %s' % v.flags + d[v.name] = s + except Exception: + logger.warning('Unable to read legacy script ' + 'metadata, so cannot generate ' + 'scripts') + else: + try: + with zf.open(metadata_name) as bwf: + wf = wrapper(bwf) + commands = json.load(wf).get('extensions') + if commands: + commands = commands.get('python.commands') + except Exception: + logger.warning('Unable to read JSON metadata, so ' + 'cannot generate scripts') + if commands: + console_scripts = commands.get('wrap_console', {}) + gui_scripts = commands.get('wrap_gui', {}) + if console_scripts or gui_scripts: + script_dir = paths.get('scripts', '') + if not os.path.isdir(script_dir): + raise ValueError('Valid script path not ' + 'specified') + maker.target_dir = script_dir + for k, v in console_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script) + fileop.set_executable_mode(filenames) + + if gui_scripts: + options = {'gui': True } + for k, v in gui_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script, options) + fileop.set_executable_mode(filenames) + + p = os.path.join(libdir, info_dir) + dist = InstalledDistribution(p) + + # Write SHARED + paths = dict(paths) # don't change passed in dict + del paths['purelib'] + del paths['platlib'] + paths['lib'] = libdir + p = dist.write_shared_locations(paths, dry_run) + if p: + outfiles.append(p) + + # Write RECORD + dist.write_installed_files(outfiles, paths['prefix'], + dry_run) + return dist + except Exception: # pragma: no cover + logger.exception('installation failed.') + fileop.rollback() + raise + finally: + shutil.rmtree(workdir) + + def _get_dylib_cache(self): + global cache + if cache is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('dylib-cache'), + sys.version[:3]) + cache = Cache(base) + return cache + + def _get_extensions(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + arcname = posixpath.join(info_dir, 'EXTENSIONS') + wrapper = codecs.getreader('utf-8') + result = [] + with ZipFile(pathname, 'r') as zf: + try: + with zf.open(arcname) as bf: + wf = wrapper(bf) + extensions = json.load(wf) + cache = self._get_dylib_cache() + prefix = cache.prefix_to_dir(pathname) + cache_base = os.path.join(cache.base, prefix) + if not os.path.isdir(cache_base): + os.makedirs(cache_base) + for name, relpath in extensions.items(): + dest = os.path.join(cache_base, convert_path(relpath)) + if not os.path.exists(dest): + extract = True + else: + file_time = os.stat(dest).st_mtime + file_time = datetime.datetime.fromtimestamp(file_time) + info = zf.getinfo(relpath) + wheel_time = datetime.datetime(*info.date_time) + extract = wheel_time > file_time + if extract: + zf.extract(relpath, cache_base) + result.append((name, dest)) + except KeyError: + pass + return result + + def is_compatible(self): + """ + Determine if a wheel is compatible with the running system. + """ + return is_compatible(self) + + def is_mountable(self): + """ + Determine if a wheel is asserted as mountable by its metadata. + """ + return True # for now - metadata details TBD + + def mount(self, append=False): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if not self.is_compatible(): + msg = 'Wheel %s not compatible with this Python.' % pathname + raise DistlibException(msg) + if not self.is_mountable(): + msg = 'Wheel %s is marked as not mountable.' % pathname + raise DistlibException(msg) + if pathname in sys.path: + logger.debug('%s already in path', pathname) + else: + if append: + sys.path.append(pathname) + else: + sys.path.insert(0, pathname) + extensions = self._get_extensions() + if extensions: + if _hook not in sys.meta_path: + sys.meta_path.append(_hook) + _hook.add(pathname, extensions) + + def unmount(self): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if pathname not in sys.path: + logger.debug('%s not in path', pathname) + else: + sys.path.remove(pathname) + if pathname in _hook.impure_wheels: + _hook.remove(pathname) + if not _hook.impure_wheels: + if _hook in sys.meta_path: + sys.meta_path.remove(_hook) + + def verify(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + # TODO version verification + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + if u_arcname.endswith('/RECORD.jws'): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + def update(self, modifier, dest_dir=None, **kwargs): + """ + Update the contents of a wheel in a generic way. The modifier should + be a callable which expects a dictionary argument: its keys are + archive-entry paths, and its values are absolute filesystem paths + where the contents the corresponding archive entries can be found. The + modifier is free to change the contents of the files pointed to, add + new entries and remove entries, before returning. This method will + extract the entire contents of the wheel to a temporary location, call + the modifier, and then use the passed (and possibly updated) + dictionary to write a new wheel. If ``dest_dir`` is specified, the new + wheel is written there -- otherwise, the original wheel is overwritten. + + The modifier should return True if it updated the wheel, else False. + This method returns the same value the modifier returns. + """ + + def get_version(path_map, info_dir): + version = path = None + key = '%s/%s' % (info_dir, METADATA_FILENAME) + if key not in path_map: + key = '%s/PKG-INFO' % info_dir + if key in path_map: + path = path_map[key] + version = Metadata(path=path).version + return version, path + + def update_version(version, path): + updated = None + try: + v = NormalizedVersion(version) + i = version.find('-') + if i < 0: + updated = '%s+1' % version + else: + parts = [int(s) for s in version[i + 1:].split('.')] + parts[-1] += 1 + updated = '%s+%s' % (version[:i], + '.'.join(str(i) for i in parts)) + except UnsupportedVersionError: + logger.debug('Cannot update non-compliant (PEP-440) ' + 'version %r', version) + if updated: + md = Metadata(path=path) + md.version = updated + legacy = not path.endswith(METADATA_FILENAME) + md.write(path=path, legacy=legacy) + logger.debug('Version updated from %r to %r', version, + updated) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + record_name = posixpath.join(info_dir, 'RECORD') + with tempdir() as workdir: + with ZipFile(pathname, 'r') as zf: + path_map = {} + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if u_arcname == record_name: + continue + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + zf.extract(zinfo, workdir) + path = os.path.join(workdir, convert_path(u_arcname)) + path_map[u_arcname] = path + + # Remember the version. + original_version, _ = get_version(path_map, info_dir) + # Files extracted. Call the modifier. + modified = modifier(path_map, **kwargs) + if modified: + # Something changed - need to build a new wheel. + current_version, path = get_version(path_map, info_dir) + if current_version and (current_version == original_version): + # Add or update local version to signify changes. + update_version(current_version, path) + # Decide where the new wheel goes. + if dest_dir is None: + fd, newpath = tempfile.mkstemp(suffix='.whl', + prefix='wheel-update-', + dir=workdir) + os.close(fd) + else: + if not os.path.isdir(dest_dir): + raise DistlibException('Not a directory: %r' % dest_dir) + newpath = os.path.join(dest_dir, self.filename) + archive_paths = list(path_map.items()) + distinfo = os.path.join(workdir, info_dir) + info = distinfo, info_dir + self.write_records(info, workdir, archive_paths) + self.build_zip(newpath, archive_paths) + if dest_dir is None: + shutil.copyfile(newpath, pathname) + return modified + +def compatible_tags(): + """ + Return (pyver, abi, arch) tuples compatible with this Python. + """ + versions = [VER_SUFFIX] + major = VER_SUFFIX[0] + for minor in range(sys.version_info[1] - 1, - 1, -1): + versions.append(''.join([major, str(minor)])) + + abis = [] + for suffix, _, _ in imp.get_suffixes(): + if suffix.startswith('.abi'): + abis.append(suffix.split('.', 2)[1]) + abis.sort() + if ABI != 'none': + abis.insert(0, ABI) + abis.append('none') + result = [] + + arches = [ARCH] + if sys.platform == 'darwin': + m = re.match('(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) + if m: + name, major, minor, arch = m.groups() + minor = int(minor) + matches = [arch] + if arch in ('i386', 'ppc'): + matches.append('fat') + if arch in ('i386', 'ppc', 'x86_64'): + matches.append('fat3') + if arch in ('ppc64', 'x86_64'): + matches.append('fat64') + if arch in ('i386', 'x86_64'): + matches.append('intel') + if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): + matches.append('universal') + while minor >= 0: + for match in matches: + s = '%s_%s_%s_%s' % (name, major, minor, match) + if s != ARCH: # already there + arches.append(s) + minor -= 1 + + # Most specific - our Python version, ABI and arch + for abi in abis: + for arch in arches: + result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) + + # where no ABI / arch dependency, but IMP_PREFIX dependency + for i, version in enumerate(versions): + result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) + if i == 0: + result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) + + # no IMP_PREFIX, ABI or arch dependency + for i, version in enumerate(versions): + result.append((''.join(('py', version)), 'none', 'any')) + if i == 0: + result.append((''.join(('py', version[0])), 'none', 'any')) + return set(result) + + +COMPATIBLE_TAGS = compatible_tags() + +del compatible_tags + + +def is_compatible(wheel, tags=None): + if not isinstance(wheel, Wheel): + wheel = Wheel(wheel) # assume it's a filename + result = False + if tags is None: + tags = COMPATIBLE_TAGS + for ver, abi, arch in tags: + if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: + result = True + break + return result diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/__init__.py new file mode 100644 index 0000000..9484fdc --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/__init__.py @@ -0,0 +1,25 @@ +""" +HTML parsing library based on the WHATWG "HTML5" +specification. The parser is designed to be compatible with existing +HTML found in the wild and implements well-defined error recovery that +is largely compatible with modern desktop web browsers. + +Example usage: + +import html5lib +f = open("my_document.html") +tree = html5lib.parse(f) +""" + +from __future__ import absolute_import, division, unicode_literals + +from .html5parser import HTMLParser, parse, parseFragment +from .treebuilders import getTreeBuilder +from .treewalkers import getTreeWalker +from .serializer import serialize + +__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder", + "getTreeWalker", "serialize"] + +# this has to be at the top level, see how setup.py parses this +__version__ = "1.0b8" diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/constants.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/constants.py new file mode 100644 index 0000000..d938e0a --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/constants.py @@ -0,0 +1,3102 @@ +from __future__ import absolute_import, division, unicode_literals + +import string + +EOF = None + +E = { + "null-character": + "Null character in input stream, replaced with U+FFFD.", + "invalid-codepoint": + "Invalid codepoint in stream.", + "incorrectly-placed-solidus": + "Solidus (/) incorrectly placed in tag.", + "incorrect-cr-newline-entity": + "Incorrect CR newline entity, replaced with LF.", + "illegal-windows-1252-entity": + "Entity used with illegal number (windows-1252 reference).", + "cant-convert-numeric-entity": + "Numeric entity couldn't be converted to character " + "(codepoint U+%(charAsInt)08x).", + "illegal-codepoint-for-numeric-entity": + "Numeric entity represents an illegal codepoint: " + "U+%(charAsInt)08x.", + "numeric-entity-without-semicolon": + "Numeric entity didn't end with ';'.", + "expected-numeric-entity-but-got-eof": + "Numeric entity expected. Got end of file instead.", + "expected-numeric-entity": + "Numeric entity expected but none found.", + "named-entity-without-semicolon": + "Named entity didn't end with ';'.", + "expected-named-entity": + "Named entity expected. Got none.", + "attributes-in-end-tag": + "End tag contains unexpected attributes.", + 'self-closing-flag-on-end-tag': + "End tag contains unexpected self-closing flag.", + "expected-tag-name-but-got-right-bracket": + "Expected tag name. Got '>' instead.", + "expected-tag-name-but-got-question-mark": + "Expected tag name. Got '?' instead. (HTML doesn't " + "support processing instructions.)", + "expected-tag-name": + "Expected tag name. Got something else instead", + "expected-closing-tag-but-got-right-bracket": + "Expected closing tag. Got '>' instead. Ignoring ''.", + "expected-closing-tag-but-got-eof": + "Expected closing tag. Unexpected end of file.", + "expected-closing-tag-but-got-char": + "Expected closing tag. Unexpected character '%(data)s' found.", + "eof-in-tag-name": + "Unexpected end of file in the tag name.", + "expected-attribute-name-but-got-eof": + "Unexpected end of file. Expected attribute name instead.", + "eof-in-attribute-name": + "Unexpected end of file in attribute name.", + "invalid-character-in-attribute-name": + "Invalid character in attribute name", + "duplicate-attribute": + "Dropped duplicate attribute on tag.", + "expected-end-of-tag-name-but-got-eof": + "Unexpected end of file. Expected = or end of tag.", + "expected-attribute-value-but-got-eof": + "Unexpected end of file. Expected attribute value.", + "expected-attribute-value-but-got-right-bracket": + "Expected attribute value. Got '>' instead.", + 'equals-in-unquoted-attribute-value': + "Unexpected = in unquoted attribute", + 'unexpected-character-in-unquoted-attribute-value': + "Unexpected character in unquoted attribute", + "invalid-character-after-attribute-name": + "Unexpected character after attribute name.", + "unexpected-character-after-attribute-value": + "Unexpected character after attribute value.", + "eof-in-attribute-value-double-quote": + "Unexpected end of file in attribute value (\").", + "eof-in-attribute-value-single-quote": + "Unexpected end of file in attribute value (').", + "eof-in-attribute-value-no-quotes": + "Unexpected end of file in attribute value.", + "unexpected-EOF-after-solidus-in-tag": + "Unexpected end of file in tag. Expected >", + "unexpected-character-after-solidus-in-tag": + "Unexpected character after / in tag. Expected >", + "expected-dashes-or-doctype": + "Expected '--' or 'DOCTYPE'. Not found.", + "unexpected-bang-after-double-dash-in-comment": + "Unexpected ! after -- in comment", + "unexpected-space-after-double-dash-in-comment": + "Unexpected space after -- in comment", + "incorrect-comment": + "Incorrect comment.", + "eof-in-comment": + "Unexpected end of file in comment.", + "eof-in-comment-end-dash": + "Unexpected end of file in comment (-)", + "unexpected-dash-after-double-dash-in-comment": + "Unexpected '-' after '--' found in comment.", + "eof-in-comment-double-dash": + "Unexpected end of file in comment (--).", + "eof-in-comment-end-space-state": + "Unexpected end of file in comment.", + "eof-in-comment-end-bang-state": + "Unexpected end of file in comment.", + "unexpected-char-in-comment": + "Unexpected character in comment found.", + "need-space-after-doctype": + "No space after literal string 'DOCTYPE'.", + "expected-doctype-name-but-got-right-bracket": + "Unexpected > character. Expected DOCTYPE name.", + "expected-doctype-name-but-got-eof": + "Unexpected end of file. Expected DOCTYPE name.", + "eof-in-doctype-name": + "Unexpected end of file in DOCTYPE name.", + "eof-in-doctype": + "Unexpected end of file in DOCTYPE.", + "expected-space-or-right-bracket-in-doctype": + "Expected space or '>'. Got '%(data)s'", + "unexpected-end-of-doctype": + "Unexpected end of DOCTYPE.", + "unexpected-char-in-doctype": + "Unexpected character in DOCTYPE.", + "eof-in-innerhtml": + "XXX innerHTML EOF", + "unexpected-doctype": + "Unexpected DOCTYPE. Ignored.", + "non-html-root": + "html needs to be the first start tag.", + "expected-doctype-but-got-eof": + "Unexpected End of file. Expected DOCTYPE.", + "unknown-doctype": + "Erroneous DOCTYPE.", + "expected-doctype-but-got-chars": + "Unexpected non-space characters. Expected DOCTYPE.", + "expected-doctype-but-got-start-tag": + "Unexpected start tag (%(name)s). Expected DOCTYPE.", + "expected-doctype-but-got-end-tag": + "Unexpected end tag (%(name)s). Expected DOCTYPE.", + "end-tag-after-implied-root": + "Unexpected end tag (%(name)s) after the (implied) root element.", + "expected-named-closing-tag-but-got-eof": + "Unexpected end of file. Expected end tag (%(name)s).", + "two-heads-are-not-better-than-one": + "Unexpected start tag head in existing head. Ignored.", + "unexpected-end-tag": + "Unexpected end tag (%(name)s). Ignored.", + "unexpected-start-tag-out-of-my-head": + "Unexpected start tag (%(name)s) that can be in head. Moved.", + "unexpected-start-tag": + "Unexpected start tag (%(name)s).", + "missing-end-tag": + "Missing end tag (%(name)s).", + "missing-end-tags": + "Missing end tags (%(name)s).", + "unexpected-start-tag-implies-end-tag": + "Unexpected start tag (%(startName)s) " + "implies end tag (%(endName)s).", + "unexpected-start-tag-treated-as": + "Unexpected start tag (%(originalName)s). Treated as %(newName)s.", + "deprecated-tag": + "Unexpected start tag %(name)s. Don't use it!", + "unexpected-start-tag-ignored": + "Unexpected start tag %(name)s. Ignored.", + "expected-one-end-tag-but-got-another": + "Unexpected end tag (%(gotName)s). " + "Missing end tag (%(expectedName)s).", + "end-tag-too-early": + "End tag (%(name)s) seen too early. Expected other end tag.", + "end-tag-too-early-named": + "Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).", + "end-tag-too-early-ignored": + "End tag (%(name)s) seen too early. Ignored.", + "adoption-agency-1.1": + "End tag (%(name)s) violates step 1, " + "paragraph 1 of the adoption agency algorithm.", + "adoption-agency-1.2": + "End tag (%(name)s) violates step 1, " + "paragraph 2 of the adoption agency algorithm.", + "adoption-agency-1.3": + "End tag (%(name)s) violates step 1, " + "paragraph 3 of the adoption agency algorithm.", + "adoption-agency-4.4": + "End tag (%(name)s) violates step 4, " + "paragraph 4 of the adoption agency algorithm.", + "unexpected-end-tag-treated-as": + "Unexpected end tag (%(originalName)s). Treated as %(newName)s.", + "no-end-tag": + "This element (%(name)s) has no end tag.", + "unexpected-implied-end-tag-in-table": + "Unexpected implied end tag (%(name)s) in the table phase.", + "unexpected-implied-end-tag-in-table-body": + "Unexpected implied end tag (%(name)s) in the table body phase.", + "unexpected-char-implies-table-voodoo": + "Unexpected non-space characters in " + "table context caused voodoo mode.", + "unexpected-hidden-input-in-table": + "Unexpected input with type hidden in table context.", + "unexpected-form-in-table": + "Unexpected form in table context.", + "unexpected-start-tag-implies-table-voodoo": + "Unexpected start tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-end-tag-implies-table-voodoo": + "Unexpected end tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-cell-in-table-body": + "Unexpected table cell start tag (%(name)s) " + "in the table body phase.", + "unexpected-cell-end-tag": + "Got table cell end tag (%(name)s) " + "while required end tags are missing.", + "unexpected-end-tag-in-table-body": + "Unexpected end tag (%(name)s) in the table body phase. Ignored.", + "unexpected-implied-end-tag-in-table-row": + "Unexpected implied end tag (%(name)s) in the table row phase.", + "unexpected-end-tag-in-table-row": + "Unexpected end tag (%(name)s) in the table row phase. Ignored.", + "unexpected-select-in-select": + "Unexpected select start tag in the select phase " + "treated as select end tag.", + "unexpected-input-in-select": + "Unexpected input start tag in the select phase.", + "unexpected-start-tag-in-select": + "Unexpected start tag token (%(name)s in the select phase. " + "Ignored.", + "unexpected-end-tag-in-select": + "Unexpected end tag (%(name)s) in the select phase. Ignored.", + "unexpected-table-element-start-tag-in-select-in-table": + "Unexpected table element start tag (%(name)s) in the select in table phase.", + "unexpected-table-element-end-tag-in-select-in-table": + "Unexpected table element end tag (%(name)s) in the select in table phase.", + "unexpected-char-after-body": + "Unexpected non-space characters in the after body phase.", + "unexpected-start-tag-after-body": + "Unexpected start tag token (%(name)s)" + " in the after body phase.", + "unexpected-end-tag-after-body": + "Unexpected end tag token (%(name)s)" + " in the after body phase.", + "unexpected-char-in-frameset": + "Unexpected characters in the frameset phase. Characters ignored.", + "unexpected-start-tag-in-frameset": + "Unexpected start tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-frameset-in-frameset-innerhtml": + "Unexpected end tag token (frameset) " + "in the frameset phase (innerHTML).", + "unexpected-end-tag-in-frameset": + "Unexpected end tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-char-after-frameset": + "Unexpected non-space characters in the " + "after frameset phase. Ignored.", + "unexpected-start-tag-after-frameset": + "Unexpected start tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-frameset": + "Unexpected end tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-body-innerhtml": + "Unexpected end tag after body(innerHtml)", + "expected-eof-but-got-char": + "Unexpected non-space characters. Expected end of file.", + "expected-eof-but-got-start-tag": + "Unexpected start tag (%(name)s)" + ". Expected end of file.", + "expected-eof-but-got-end-tag": + "Unexpected end tag (%(name)s)" + ". Expected end of file.", + "eof-in-table": + "Unexpected end of file. Expected table content.", + "eof-in-select": + "Unexpected end of file. Expected select content.", + "eof-in-frameset": + "Unexpected end of file. Expected frameset content.", + "eof-in-script-in-script": + "Unexpected end of file. Expected script content.", + "eof-in-foreign-lands": + "Unexpected end of file. Expected foreign content", + "non-void-element-with-trailing-solidus": + "Trailing solidus not allowed on element %(name)s", + "unexpected-html-element-in-foreign-content": + "Element %(name)s not allowed in a non-html context", + "unexpected-end-tag-before-html": + "Unexpected end tag (%(name)s) before html.", + "XXX-undefined-error": + "Undefined error (this sucks and should be fixed)", +} + +namespaces = { + "html": "http://www.w3.org/1999/xhtml", + "mathml": "http://www.w3.org/1998/Math/MathML", + "svg": "http://www.w3.org/2000/svg", + "xlink": "http://www.w3.org/1999/xlink", + "xml": "http://www.w3.org/XML/1998/namespace", + "xmlns": "http://www.w3.org/2000/xmlns/" +} + +scopingElements = frozenset([ + (namespaces["html"], "applet"), + (namespaces["html"], "caption"), + (namespaces["html"], "html"), + (namespaces["html"], "marquee"), + (namespaces["html"], "object"), + (namespaces["html"], "table"), + (namespaces["html"], "td"), + (namespaces["html"], "th"), + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext"), + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title"), +]) + +formattingElements = frozenset([ + (namespaces["html"], "a"), + (namespaces["html"], "b"), + (namespaces["html"], "big"), + (namespaces["html"], "code"), + (namespaces["html"], "em"), + (namespaces["html"], "font"), + (namespaces["html"], "i"), + (namespaces["html"], "nobr"), + (namespaces["html"], "s"), + (namespaces["html"], "small"), + (namespaces["html"], "strike"), + (namespaces["html"], "strong"), + (namespaces["html"], "tt"), + (namespaces["html"], "u") +]) + +specialElements = frozenset([ + (namespaces["html"], "address"), + (namespaces["html"], "applet"), + (namespaces["html"], "area"), + (namespaces["html"], "article"), + (namespaces["html"], "aside"), + (namespaces["html"], "base"), + (namespaces["html"], "basefont"), + (namespaces["html"], "bgsound"), + (namespaces["html"], "blockquote"), + (namespaces["html"], "body"), + (namespaces["html"], "br"), + (namespaces["html"], "button"), + (namespaces["html"], "caption"), + (namespaces["html"], "center"), + (namespaces["html"], "col"), + (namespaces["html"], "colgroup"), + (namespaces["html"], "command"), + (namespaces["html"], "dd"), + (namespaces["html"], "details"), + (namespaces["html"], "dir"), + (namespaces["html"], "div"), + (namespaces["html"], "dl"), + (namespaces["html"], "dt"), + (namespaces["html"], "embed"), + (namespaces["html"], "fieldset"), + (namespaces["html"], "figure"), + (namespaces["html"], "footer"), + (namespaces["html"], "form"), + (namespaces["html"], "frame"), + (namespaces["html"], "frameset"), + (namespaces["html"], "h1"), + (namespaces["html"], "h2"), + (namespaces["html"], "h3"), + (namespaces["html"], "h4"), + (namespaces["html"], "h5"), + (namespaces["html"], "h6"), + (namespaces["html"], "head"), + (namespaces["html"], "header"), + (namespaces["html"], "hr"), + (namespaces["html"], "html"), + (namespaces["html"], "iframe"), + # Note that image is commented out in the spec as "this isn't an + # element that can end up on the stack, so it doesn't matter," + (namespaces["html"], "image"), + (namespaces["html"], "img"), + (namespaces["html"], "input"), + (namespaces["html"], "isindex"), + (namespaces["html"], "li"), + (namespaces["html"], "link"), + (namespaces["html"], "listing"), + (namespaces["html"], "marquee"), + (namespaces["html"], "menu"), + (namespaces["html"], "meta"), + (namespaces["html"], "nav"), + (namespaces["html"], "noembed"), + (namespaces["html"], "noframes"), + (namespaces["html"], "noscript"), + (namespaces["html"], "object"), + (namespaces["html"], "ol"), + (namespaces["html"], "p"), + (namespaces["html"], "param"), + (namespaces["html"], "plaintext"), + (namespaces["html"], "pre"), + (namespaces["html"], "script"), + (namespaces["html"], "section"), + (namespaces["html"], "select"), + (namespaces["html"], "style"), + (namespaces["html"], "table"), + (namespaces["html"], "tbody"), + (namespaces["html"], "td"), + (namespaces["html"], "textarea"), + (namespaces["html"], "tfoot"), + (namespaces["html"], "th"), + (namespaces["html"], "thead"), + (namespaces["html"], "title"), + (namespaces["html"], "tr"), + (namespaces["html"], "ul"), + (namespaces["html"], "wbr"), + (namespaces["html"], "xmp"), + (namespaces["svg"], "foreignObject") +]) + +htmlIntegrationPointElements = frozenset([ + (namespaces["mathml"], "annotaion-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title") +]) + +mathmlTextIntegrationPointElements = frozenset([ + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext") +]) + +adjustForeignAttributes = { + "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]), + "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]), + "xlink:href": ("xlink", "href", namespaces["xlink"]), + "xlink:role": ("xlink", "role", namespaces["xlink"]), + "xlink:show": ("xlink", "show", namespaces["xlink"]), + "xlink:title": ("xlink", "title", namespaces["xlink"]), + "xlink:type": ("xlink", "type", namespaces["xlink"]), + "xml:base": ("xml", "base", namespaces["xml"]), + "xml:lang": ("xml", "lang", namespaces["xml"]), + "xml:space": ("xml", "space", namespaces["xml"]), + "xmlns": (None, "xmlns", namespaces["xmlns"]), + "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"]) +} + +unadjustForeignAttributes = dict([((ns, local), qname) for qname, (prefix, local, ns) in + adjustForeignAttributes.items()]) + +spaceCharacters = frozenset([ + "\t", + "\n", + "\u000C", + " ", + "\r" +]) + +tableInsertModeElements = frozenset([ + "table", + "tbody", + "tfoot", + "thead", + "tr" +]) + +asciiLowercase = frozenset(string.ascii_lowercase) +asciiUppercase = frozenset(string.ascii_uppercase) +asciiLetters = frozenset(string.ascii_letters) +digits = frozenset(string.digits) +hexDigits = frozenset(string.hexdigits) + +asciiUpper2Lower = dict([(ord(c), ord(c.lower())) + for c in string.ascii_uppercase]) + +# Heading elements need to be ordered +headingElements = ( + "h1", + "h2", + "h3", + "h4", + "h5", + "h6" +) + +voidElements = frozenset([ + "base", + "command", + "event-source", + "link", + "meta", + "hr", + "br", + "img", + "embed", + "param", + "area", + "col", + "input", + "source", + "track" +]) + +cdataElements = frozenset(['title', 'textarea']) + +rcdataElements = frozenset([ + 'style', + 'script', + 'xmp', + 'iframe', + 'noembed', + 'noframes', + 'noscript' +]) + +booleanAttributes = { + "": frozenset(["irrelevant"]), + "style": frozenset(["scoped"]), + "img": frozenset(["ismap"]), + "audio": frozenset(["autoplay", "controls"]), + "video": frozenset(["autoplay", "controls"]), + "script": frozenset(["defer", "async"]), + "details": frozenset(["open"]), + "datagrid": frozenset(["multiple", "disabled"]), + "command": frozenset(["hidden", "disabled", "checked", "default"]), + "hr": frozenset(["noshade"]), + "menu": frozenset(["autosubmit"]), + "fieldset": frozenset(["disabled", "readonly"]), + "option": frozenset(["disabled", "readonly", "selected"]), + "optgroup": frozenset(["disabled", "readonly"]), + "button": frozenset(["disabled", "autofocus"]), + "input": frozenset(["disabled", "readonly", "required", "autofocus", "checked", "ismap"]), + "select": frozenset(["disabled", "readonly", "autofocus", "multiple"]), + "output": frozenset(["disabled", "readonly"]), +} + +# entitiesWindows1252 has to be _ordered_ and needs to have an index. It +# therefore can't be a frozenset. +entitiesWindows1252 = ( + 8364, # 0x80 0x20AC EURO SIGN + 65533, # 0x81 UNDEFINED + 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK + 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK + 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK + 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS + 8224, # 0x86 0x2020 DAGGER + 8225, # 0x87 0x2021 DOUBLE DAGGER + 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT + 8240, # 0x89 0x2030 PER MILLE SIGN + 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON + 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE + 65533, # 0x8D UNDEFINED + 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON + 65533, # 0x8F UNDEFINED + 65533, # 0x90 UNDEFINED + 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK + 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK + 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK + 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK + 8226, # 0x95 0x2022 BULLET + 8211, # 0x96 0x2013 EN DASH + 8212, # 0x97 0x2014 EM DASH + 732, # 0x98 0x02DC SMALL TILDE + 8482, # 0x99 0x2122 TRADE MARK SIGN + 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON + 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE + 65533, # 0x9D UNDEFINED + 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON + 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS +) + +xmlEntities = frozenset(['lt;', 'gt;', 'amp;', 'apos;', 'quot;']) + +entities = { + "AElig": "\xc6", + "AElig;": "\xc6", + "AMP": "&", + "AMP;": "&", + "Aacute": "\xc1", + "Aacute;": "\xc1", + "Abreve;": "\u0102", + "Acirc": "\xc2", + "Acirc;": "\xc2", + "Acy;": "\u0410", + "Afr;": "\U0001d504", + "Agrave": "\xc0", + "Agrave;": "\xc0", + "Alpha;": "\u0391", + "Amacr;": "\u0100", + "And;": "\u2a53", + "Aogon;": "\u0104", + "Aopf;": "\U0001d538", + "ApplyFunction;": "\u2061", + "Aring": "\xc5", + "Aring;": "\xc5", + "Ascr;": "\U0001d49c", + "Assign;": "\u2254", + "Atilde": "\xc3", + "Atilde;": "\xc3", + "Auml": "\xc4", + "Auml;": "\xc4", + "Backslash;": "\u2216", + "Barv;": "\u2ae7", + "Barwed;": "\u2306", + "Bcy;": "\u0411", + "Because;": "\u2235", + "Bernoullis;": "\u212c", + "Beta;": "\u0392", + "Bfr;": "\U0001d505", + "Bopf;": "\U0001d539", + "Breve;": "\u02d8", + "Bscr;": "\u212c", + "Bumpeq;": "\u224e", + "CHcy;": "\u0427", + "COPY": "\xa9", + "COPY;": "\xa9", + "Cacute;": "\u0106", + "Cap;": "\u22d2", + "CapitalDifferentialD;": "\u2145", + "Cayleys;": "\u212d", + "Ccaron;": "\u010c", + "Ccedil": "\xc7", + "Ccedil;": "\xc7", + "Ccirc;": "\u0108", + "Cconint;": "\u2230", + "Cdot;": "\u010a", + "Cedilla;": "\xb8", + "CenterDot;": "\xb7", + "Cfr;": "\u212d", + "Chi;": "\u03a7", + "CircleDot;": "\u2299", + "CircleMinus;": "\u2296", + "CirclePlus;": "\u2295", + "CircleTimes;": "\u2297", + "ClockwiseContourIntegral;": "\u2232", + "CloseCurlyDoubleQuote;": "\u201d", + "CloseCurlyQuote;": "\u2019", + "Colon;": "\u2237", + "Colone;": "\u2a74", + "Congruent;": "\u2261", + "Conint;": "\u222f", + "ContourIntegral;": "\u222e", + "Copf;": "\u2102", + "Coproduct;": "\u2210", + "CounterClockwiseContourIntegral;": "\u2233", + "Cross;": "\u2a2f", + "Cscr;": "\U0001d49e", + "Cup;": "\u22d3", + "CupCap;": "\u224d", + "DD;": "\u2145", + "DDotrahd;": "\u2911", + "DJcy;": "\u0402", + "DScy;": "\u0405", + "DZcy;": "\u040f", + "Dagger;": "\u2021", + "Darr;": "\u21a1", + "Dashv;": "\u2ae4", + "Dcaron;": "\u010e", + "Dcy;": "\u0414", + "Del;": "\u2207", + "Delta;": "\u0394", + "Dfr;": "\U0001d507", + "DiacriticalAcute;": "\xb4", + "DiacriticalDot;": "\u02d9", + "DiacriticalDoubleAcute;": "\u02dd", + "DiacriticalGrave;": "`", + "DiacriticalTilde;": "\u02dc", + "Diamond;": "\u22c4", + "DifferentialD;": "\u2146", + "Dopf;": "\U0001d53b", + "Dot;": "\xa8", + "DotDot;": "\u20dc", + "DotEqual;": "\u2250", + "DoubleContourIntegral;": "\u222f", + "DoubleDot;": "\xa8", + "DoubleDownArrow;": "\u21d3", + "DoubleLeftArrow;": "\u21d0", + "DoubleLeftRightArrow;": "\u21d4", + "DoubleLeftTee;": "\u2ae4", + "DoubleLongLeftArrow;": "\u27f8", + "DoubleLongLeftRightArrow;": "\u27fa", + "DoubleLongRightArrow;": "\u27f9", + "DoubleRightArrow;": "\u21d2", + "DoubleRightTee;": "\u22a8", + "DoubleUpArrow;": "\u21d1", + "DoubleUpDownArrow;": "\u21d5", + "DoubleVerticalBar;": "\u2225", + "DownArrow;": "\u2193", + "DownArrowBar;": "\u2913", + "DownArrowUpArrow;": "\u21f5", + "DownBreve;": "\u0311", + "DownLeftRightVector;": "\u2950", + "DownLeftTeeVector;": "\u295e", + "DownLeftVector;": "\u21bd", + "DownLeftVectorBar;": "\u2956", + "DownRightTeeVector;": "\u295f", + "DownRightVector;": "\u21c1", + "DownRightVectorBar;": "\u2957", + "DownTee;": "\u22a4", + "DownTeeArrow;": "\u21a7", + "Downarrow;": "\u21d3", + "Dscr;": "\U0001d49f", + "Dstrok;": "\u0110", + "ENG;": "\u014a", + "ETH": "\xd0", + "ETH;": "\xd0", + "Eacute": "\xc9", + "Eacute;": "\xc9", + "Ecaron;": "\u011a", + "Ecirc": "\xca", + "Ecirc;": "\xca", + "Ecy;": "\u042d", + "Edot;": "\u0116", + "Efr;": "\U0001d508", + "Egrave": "\xc8", + "Egrave;": "\xc8", + "Element;": "\u2208", + "Emacr;": "\u0112", + "EmptySmallSquare;": "\u25fb", + "EmptyVerySmallSquare;": "\u25ab", + "Eogon;": "\u0118", + "Eopf;": "\U0001d53c", + "Epsilon;": "\u0395", + "Equal;": "\u2a75", + "EqualTilde;": "\u2242", + "Equilibrium;": "\u21cc", + "Escr;": "\u2130", + "Esim;": "\u2a73", + "Eta;": "\u0397", + "Euml": "\xcb", + "Euml;": "\xcb", + "Exists;": "\u2203", + "ExponentialE;": "\u2147", + "Fcy;": "\u0424", + "Ffr;": "\U0001d509", + "FilledSmallSquare;": "\u25fc", + "FilledVerySmallSquare;": "\u25aa", + "Fopf;": "\U0001d53d", + "ForAll;": "\u2200", + "Fouriertrf;": "\u2131", + "Fscr;": "\u2131", + "GJcy;": "\u0403", + "GT": ">", + "GT;": ">", + "Gamma;": "\u0393", + "Gammad;": "\u03dc", + "Gbreve;": "\u011e", + "Gcedil;": "\u0122", + "Gcirc;": "\u011c", + "Gcy;": "\u0413", + "Gdot;": "\u0120", + "Gfr;": "\U0001d50a", + "Gg;": "\u22d9", + "Gopf;": "\U0001d53e", + "GreaterEqual;": "\u2265", + "GreaterEqualLess;": "\u22db", + "GreaterFullEqual;": "\u2267", + "GreaterGreater;": "\u2aa2", + "GreaterLess;": "\u2277", + "GreaterSlantEqual;": "\u2a7e", + "GreaterTilde;": "\u2273", + "Gscr;": "\U0001d4a2", + "Gt;": "\u226b", + "HARDcy;": "\u042a", + "Hacek;": "\u02c7", + "Hat;": "^", + "Hcirc;": "\u0124", + "Hfr;": "\u210c", + "HilbertSpace;": "\u210b", + "Hopf;": "\u210d", + "HorizontalLine;": "\u2500", + "Hscr;": "\u210b", + "Hstrok;": "\u0126", + "HumpDownHump;": "\u224e", + "HumpEqual;": "\u224f", + "IEcy;": "\u0415", + "IJlig;": "\u0132", + "IOcy;": "\u0401", + "Iacute": "\xcd", + "Iacute;": "\xcd", + "Icirc": "\xce", + "Icirc;": "\xce", + "Icy;": "\u0418", + "Idot;": "\u0130", + "Ifr;": "\u2111", + "Igrave": "\xcc", + "Igrave;": "\xcc", + "Im;": "\u2111", + "Imacr;": "\u012a", + "ImaginaryI;": "\u2148", + "Implies;": "\u21d2", + "Int;": "\u222c", + "Integral;": "\u222b", + "Intersection;": "\u22c2", + "InvisibleComma;": "\u2063", + "InvisibleTimes;": "\u2062", + "Iogon;": "\u012e", + "Iopf;": "\U0001d540", + "Iota;": "\u0399", + "Iscr;": "\u2110", + "Itilde;": "\u0128", + "Iukcy;": "\u0406", + "Iuml": "\xcf", + "Iuml;": "\xcf", + "Jcirc;": "\u0134", + "Jcy;": "\u0419", + "Jfr;": "\U0001d50d", + "Jopf;": "\U0001d541", + "Jscr;": "\U0001d4a5", + "Jsercy;": "\u0408", + "Jukcy;": "\u0404", + "KHcy;": "\u0425", + "KJcy;": "\u040c", + "Kappa;": "\u039a", + "Kcedil;": "\u0136", + "Kcy;": "\u041a", + "Kfr;": "\U0001d50e", + "Kopf;": "\U0001d542", + "Kscr;": "\U0001d4a6", + "LJcy;": "\u0409", + "LT": "<", + "LT;": "<", + "Lacute;": "\u0139", + "Lambda;": "\u039b", + "Lang;": "\u27ea", + "Laplacetrf;": "\u2112", + "Larr;": "\u219e", + "Lcaron;": "\u013d", + "Lcedil;": "\u013b", + "Lcy;": "\u041b", + "LeftAngleBracket;": "\u27e8", + "LeftArrow;": "\u2190", + "LeftArrowBar;": "\u21e4", + "LeftArrowRightArrow;": "\u21c6", + "LeftCeiling;": "\u2308", + "LeftDoubleBracket;": "\u27e6", + "LeftDownTeeVector;": "\u2961", + "LeftDownVector;": "\u21c3", + "LeftDownVectorBar;": "\u2959", + "LeftFloor;": "\u230a", + "LeftRightArrow;": "\u2194", + "LeftRightVector;": "\u294e", + "LeftTee;": "\u22a3", + "LeftTeeArrow;": "\u21a4", + "LeftTeeVector;": "\u295a", + "LeftTriangle;": "\u22b2", + "LeftTriangleBar;": "\u29cf", + "LeftTriangleEqual;": "\u22b4", + "LeftUpDownVector;": "\u2951", + "LeftUpTeeVector;": "\u2960", + "LeftUpVector;": "\u21bf", + "LeftUpVectorBar;": "\u2958", + "LeftVector;": "\u21bc", + "LeftVectorBar;": "\u2952", + "Leftarrow;": "\u21d0", + "Leftrightarrow;": "\u21d4", + "LessEqualGreater;": "\u22da", + "LessFullEqual;": "\u2266", + "LessGreater;": "\u2276", + "LessLess;": "\u2aa1", + "LessSlantEqual;": "\u2a7d", + "LessTilde;": "\u2272", + "Lfr;": "\U0001d50f", + "Ll;": "\u22d8", + "Lleftarrow;": "\u21da", + "Lmidot;": "\u013f", + "LongLeftArrow;": "\u27f5", + "LongLeftRightArrow;": "\u27f7", + "LongRightArrow;": "\u27f6", + "Longleftarrow;": "\u27f8", + "Longleftrightarrow;": "\u27fa", + "Longrightarrow;": "\u27f9", + "Lopf;": "\U0001d543", + "LowerLeftArrow;": "\u2199", + "LowerRightArrow;": "\u2198", + "Lscr;": "\u2112", + "Lsh;": "\u21b0", + "Lstrok;": "\u0141", + "Lt;": "\u226a", + "Map;": "\u2905", + "Mcy;": "\u041c", + "MediumSpace;": "\u205f", + "Mellintrf;": "\u2133", + "Mfr;": "\U0001d510", + "MinusPlus;": "\u2213", + "Mopf;": "\U0001d544", + "Mscr;": "\u2133", + "Mu;": "\u039c", + "NJcy;": "\u040a", + "Nacute;": "\u0143", + "Ncaron;": "\u0147", + "Ncedil;": "\u0145", + "Ncy;": "\u041d", + "NegativeMediumSpace;": "\u200b", + "NegativeThickSpace;": "\u200b", + "NegativeThinSpace;": "\u200b", + "NegativeVeryThinSpace;": "\u200b", + "NestedGreaterGreater;": "\u226b", + "NestedLessLess;": "\u226a", + "NewLine;": "\n", + "Nfr;": "\U0001d511", + "NoBreak;": "\u2060", + "NonBreakingSpace;": "\xa0", + "Nopf;": "\u2115", + "Not;": "\u2aec", + "NotCongruent;": "\u2262", + "NotCupCap;": "\u226d", + "NotDoubleVerticalBar;": "\u2226", + "NotElement;": "\u2209", + "NotEqual;": "\u2260", + "NotEqualTilde;": "\u2242\u0338", + "NotExists;": "\u2204", + "NotGreater;": "\u226f", + "NotGreaterEqual;": "\u2271", + "NotGreaterFullEqual;": "\u2267\u0338", + "NotGreaterGreater;": "\u226b\u0338", + "NotGreaterLess;": "\u2279", + "NotGreaterSlantEqual;": "\u2a7e\u0338", + "NotGreaterTilde;": "\u2275", + "NotHumpDownHump;": "\u224e\u0338", + "NotHumpEqual;": "\u224f\u0338", + "NotLeftTriangle;": "\u22ea", + "NotLeftTriangleBar;": "\u29cf\u0338", + "NotLeftTriangleEqual;": "\u22ec", + "NotLess;": "\u226e", + "NotLessEqual;": "\u2270", + "NotLessGreater;": "\u2278", + "NotLessLess;": "\u226a\u0338", + "NotLessSlantEqual;": "\u2a7d\u0338", + "NotLessTilde;": "\u2274", + "NotNestedGreaterGreater;": "\u2aa2\u0338", + "NotNestedLessLess;": "\u2aa1\u0338", + "NotPrecedes;": "\u2280", + "NotPrecedesEqual;": "\u2aaf\u0338", + "NotPrecedesSlantEqual;": "\u22e0", + "NotReverseElement;": "\u220c", + "NotRightTriangle;": "\u22eb", + "NotRightTriangleBar;": "\u29d0\u0338", + "NotRightTriangleEqual;": "\u22ed", + "NotSquareSubset;": "\u228f\u0338", + "NotSquareSubsetEqual;": "\u22e2", + "NotSquareSuperset;": "\u2290\u0338", + "NotSquareSupersetEqual;": "\u22e3", + "NotSubset;": "\u2282\u20d2", + "NotSubsetEqual;": "\u2288", + "NotSucceeds;": "\u2281", + "NotSucceedsEqual;": "\u2ab0\u0338", + "NotSucceedsSlantEqual;": "\u22e1", + "NotSucceedsTilde;": "\u227f\u0338", + "NotSuperset;": "\u2283\u20d2", + "NotSupersetEqual;": "\u2289", + "NotTilde;": "\u2241", + "NotTildeEqual;": "\u2244", + "NotTildeFullEqual;": "\u2247", + "NotTildeTilde;": "\u2249", + "NotVerticalBar;": "\u2224", + "Nscr;": "\U0001d4a9", + "Ntilde": "\xd1", + "Ntilde;": "\xd1", + "Nu;": "\u039d", + "OElig;": "\u0152", + "Oacute": "\xd3", + "Oacute;": "\xd3", + "Ocirc": "\xd4", + "Ocirc;": "\xd4", + "Ocy;": "\u041e", + "Odblac;": "\u0150", + "Ofr;": "\U0001d512", + "Ograve": "\xd2", + "Ograve;": "\xd2", + "Omacr;": "\u014c", + "Omega;": "\u03a9", + "Omicron;": "\u039f", + "Oopf;": "\U0001d546", + "OpenCurlyDoubleQuote;": "\u201c", + "OpenCurlyQuote;": "\u2018", + "Or;": "\u2a54", + "Oscr;": "\U0001d4aa", + "Oslash": "\xd8", + "Oslash;": "\xd8", + "Otilde": "\xd5", + "Otilde;": "\xd5", + "Otimes;": "\u2a37", + "Ouml": "\xd6", + "Ouml;": "\xd6", + "OverBar;": "\u203e", + "OverBrace;": "\u23de", + "OverBracket;": "\u23b4", + "OverParenthesis;": "\u23dc", + "PartialD;": "\u2202", + "Pcy;": "\u041f", + "Pfr;": "\U0001d513", + "Phi;": "\u03a6", + "Pi;": "\u03a0", + "PlusMinus;": "\xb1", + "Poincareplane;": "\u210c", + "Popf;": "\u2119", + "Pr;": "\u2abb", + "Precedes;": "\u227a", + "PrecedesEqual;": "\u2aaf", + "PrecedesSlantEqual;": "\u227c", + "PrecedesTilde;": "\u227e", + "Prime;": "\u2033", + "Product;": "\u220f", + "Proportion;": "\u2237", + "Proportional;": "\u221d", + "Pscr;": "\U0001d4ab", + "Psi;": "\u03a8", + "QUOT": "\"", + "QUOT;": "\"", + "Qfr;": "\U0001d514", + "Qopf;": "\u211a", + "Qscr;": "\U0001d4ac", + "RBarr;": "\u2910", + "REG": "\xae", + "REG;": "\xae", + "Racute;": "\u0154", + "Rang;": "\u27eb", + "Rarr;": "\u21a0", + "Rarrtl;": "\u2916", + "Rcaron;": "\u0158", + "Rcedil;": "\u0156", + "Rcy;": "\u0420", + "Re;": "\u211c", + "ReverseElement;": "\u220b", + "ReverseEquilibrium;": "\u21cb", + "ReverseUpEquilibrium;": "\u296f", + "Rfr;": "\u211c", + "Rho;": "\u03a1", + "RightAngleBracket;": "\u27e9", + "RightArrow;": "\u2192", + "RightArrowBar;": "\u21e5", + "RightArrowLeftArrow;": "\u21c4", + "RightCeiling;": "\u2309", + "RightDoubleBracket;": "\u27e7", + "RightDownTeeVector;": "\u295d", + "RightDownVector;": "\u21c2", + "RightDownVectorBar;": "\u2955", + "RightFloor;": "\u230b", + "RightTee;": "\u22a2", + "RightTeeArrow;": "\u21a6", + "RightTeeVector;": "\u295b", + "RightTriangle;": "\u22b3", + "RightTriangleBar;": "\u29d0", + "RightTriangleEqual;": "\u22b5", + "RightUpDownVector;": "\u294f", + "RightUpTeeVector;": "\u295c", + "RightUpVector;": "\u21be", + "RightUpVectorBar;": "\u2954", + "RightVector;": "\u21c0", + "RightVectorBar;": "\u2953", + "Rightarrow;": "\u21d2", + "Ropf;": "\u211d", + "RoundImplies;": "\u2970", + "Rrightarrow;": "\u21db", + "Rscr;": "\u211b", + "Rsh;": "\u21b1", + "RuleDelayed;": "\u29f4", + "SHCHcy;": "\u0429", + "SHcy;": "\u0428", + "SOFTcy;": "\u042c", + "Sacute;": "\u015a", + "Sc;": "\u2abc", + "Scaron;": "\u0160", + "Scedil;": "\u015e", + "Scirc;": "\u015c", + "Scy;": "\u0421", + "Sfr;": "\U0001d516", + "ShortDownArrow;": "\u2193", + "ShortLeftArrow;": "\u2190", + "ShortRightArrow;": "\u2192", + "ShortUpArrow;": "\u2191", + "Sigma;": "\u03a3", + "SmallCircle;": "\u2218", + "Sopf;": "\U0001d54a", + "Sqrt;": "\u221a", + "Square;": "\u25a1", + "SquareIntersection;": "\u2293", + "SquareSubset;": "\u228f", + "SquareSubsetEqual;": "\u2291", + "SquareSuperset;": "\u2290", + "SquareSupersetEqual;": "\u2292", + "SquareUnion;": "\u2294", + "Sscr;": "\U0001d4ae", + "Star;": "\u22c6", + "Sub;": "\u22d0", + "Subset;": "\u22d0", + "SubsetEqual;": "\u2286", + "Succeeds;": "\u227b", + "SucceedsEqual;": "\u2ab0", + "SucceedsSlantEqual;": "\u227d", + "SucceedsTilde;": "\u227f", + "SuchThat;": "\u220b", + "Sum;": "\u2211", + "Sup;": "\u22d1", + "Superset;": "\u2283", + "SupersetEqual;": "\u2287", + "Supset;": "\u22d1", + "THORN": "\xde", + "THORN;": "\xde", + "TRADE;": "\u2122", + "TSHcy;": "\u040b", + "TScy;": "\u0426", + "Tab;": "\t", + "Tau;": "\u03a4", + "Tcaron;": "\u0164", + "Tcedil;": "\u0162", + "Tcy;": "\u0422", + "Tfr;": "\U0001d517", + "Therefore;": "\u2234", + "Theta;": "\u0398", + "ThickSpace;": "\u205f\u200a", + "ThinSpace;": "\u2009", + "Tilde;": "\u223c", + "TildeEqual;": "\u2243", + "TildeFullEqual;": "\u2245", + "TildeTilde;": "\u2248", + "Topf;": "\U0001d54b", + "TripleDot;": "\u20db", + "Tscr;": "\U0001d4af", + "Tstrok;": "\u0166", + "Uacute": "\xda", + "Uacute;": "\xda", + "Uarr;": "\u219f", + "Uarrocir;": "\u2949", + "Ubrcy;": "\u040e", + "Ubreve;": "\u016c", + "Ucirc": "\xdb", + "Ucirc;": "\xdb", + "Ucy;": "\u0423", + "Udblac;": "\u0170", + "Ufr;": "\U0001d518", + "Ugrave": "\xd9", + "Ugrave;": "\xd9", + "Umacr;": "\u016a", + "UnderBar;": "_", + "UnderBrace;": "\u23df", + "UnderBracket;": "\u23b5", + "UnderParenthesis;": "\u23dd", + "Union;": "\u22c3", + "UnionPlus;": "\u228e", + "Uogon;": "\u0172", + "Uopf;": "\U0001d54c", + "UpArrow;": "\u2191", + "UpArrowBar;": "\u2912", + "UpArrowDownArrow;": "\u21c5", + "UpDownArrow;": "\u2195", + "UpEquilibrium;": "\u296e", + "UpTee;": "\u22a5", + "UpTeeArrow;": "\u21a5", + "Uparrow;": "\u21d1", + "Updownarrow;": "\u21d5", + "UpperLeftArrow;": "\u2196", + "UpperRightArrow;": "\u2197", + "Upsi;": "\u03d2", + "Upsilon;": "\u03a5", + "Uring;": "\u016e", + "Uscr;": "\U0001d4b0", + "Utilde;": "\u0168", + "Uuml": "\xdc", + "Uuml;": "\xdc", + "VDash;": "\u22ab", + "Vbar;": "\u2aeb", + "Vcy;": "\u0412", + "Vdash;": "\u22a9", + "Vdashl;": "\u2ae6", + "Vee;": "\u22c1", + "Verbar;": "\u2016", + "Vert;": "\u2016", + "VerticalBar;": "\u2223", + "VerticalLine;": "|", + "VerticalSeparator;": "\u2758", + "VerticalTilde;": "\u2240", + "VeryThinSpace;": "\u200a", + "Vfr;": "\U0001d519", + "Vopf;": "\U0001d54d", + "Vscr;": "\U0001d4b1", + "Vvdash;": "\u22aa", + "Wcirc;": "\u0174", + "Wedge;": "\u22c0", + "Wfr;": "\U0001d51a", + "Wopf;": "\U0001d54e", + "Wscr;": "\U0001d4b2", + "Xfr;": "\U0001d51b", + "Xi;": "\u039e", + "Xopf;": "\U0001d54f", + "Xscr;": "\U0001d4b3", + "YAcy;": "\u042f", + "YIcy;": "\u0407", + "YUcy;": "\u042e", + "Yacute": "\xdd", + "Yacute;": "\xdd", + "Ycirc;": "\u0176", + "Ycy;": "\u042b", + "Yfr;": "\U0001d51c", + "Yopf;": "\U0001d550", + "Yscr;": "\U0001d4b4", + "Yuml;": "\u0178", + "ZHcy;": "\u0416", + "Zacute;": "\u0179", + "Zcaron;": "\u017d", + "Zcy;": "\u0417", + "Zdot;": "\u017b", + "ZeroWidthSpace;": "\u200b", + "Zeta;": "\u0396", + "Zfr;": "\u2128", + "Zopf;": "\u2124", + "Zscr;": "\U0001d4b5", + "aacute": "\xe1", + "aacute;": "\xe1", + "abreve;": "\u0103", + "ac;": "\u223e", + "acE;": "\u223e\u0333", + "acd;": "\u223f", + "acirc": "\xe2", + "acirc;": "\xe2", + "acute": "\xb4", + "acute;": "\xb4", + "acy;": "\u0430", + "aelig": "\xe6", + "aelig;": "\xe6", + "af;": "\u2061", + "afr;": "\U0001d51e", + "agrave": "\xe0", + "agrave;": "\xe0", + "alefsym;": "\u2135", + "aleph;": "\u2135", + "alpha;": "\u03b1", + "amacr;": "\u0101", + "amalg;": "\u2a3f", + "amp": "&", + "amp;": "&", + "and;": "\u2227", + "andand;": "\u2a55", + "andd;": "\u2a5c", + "andslope;": "\u2a58", + "andv;": "\u2a5a", + "ang;": "\u2220", + "ange;": "\u29a4", + "angle;": "\u2220", + "angmsd;": "\u2221", + "angmsdaa;": "\u29a8", + "angmsdab;": "\u29a9", + "angmsdac;": "\u29aa", + "angmsdad;": "\u29ab", + "angmsdae;": "\u29ac", + "angmsdaf;": "\u29ad", + "angmsdag;": "\u29ae", + "angmsdah;": "\u29af", + "angrt;": "\u221f", + "angrtvb;": "\u22be", + "angrtvbd;": "\u299d", + "angsph;": "\u2222", + "angst;": "\xc5", + "angzarr;": "\u237c", + "aogon;": "\u0105", + "aopf;": "\U0001d552", + "ap;": "\u2248", + "apE;": "\u2a70", + "apacir;": "\u2a6f", + "ape;": "\u224a", + "apid;": "\u224b", + "apos;": "'", + "approx;": "\u2248", + "approxeq;": "\u224a", + "aring": "\xe5", + "aring;": "\xe5", + "ascr;": "\U0001d4b6", + "ast;": "*", + "asymp;": "\u2248", + "asympeq;": "\u224d", + "atilde": "\xe3", + "atilde;": "\xe3", + "auml": "\xe4", + "auml;": "\xe4", + "awconint;": "\u2233", + "awint;": "\u2a11", + "bNot;": "\u2aed", + "backcong;": "\u224c", + "backepsilon;": "\u03f6", + "backprime;": "\u2035", + "backsim;": "\u223d", + "backsimeq;": "\u22cd", + "barvee;": "\u22bd", + "barwed;": "\u2305", + "barwedge;": "\u2305", + "bbrk;": "\u23b5", + "bbrktbrk;": "\u23b6", + "bcong;": "\u224c", + "bcy;": "\u0431", + "bdquo;": "\u201e", + "becaus;": "\u2235", + "because;": "\u2235", + "bemptyv;": "\u29b0", + "bepsi;": "\u03f6", + "bernou;": "\u212c", + "beta;": "\u03b2", + "beth;": "\u2136", + "between;": "\u226c", + "bfr;": "\U0001d51f", + "bigcap;": "\u22c2", + "bigcirc;": "\u25ef", + "bigcup;": "\u22c3", + "bigodot;": "\u2a00", + "bigoplus;": "\u2a01", + "bigotimes;": "\u2a02", + "bigsqcup;": "\u2a06", + "bigstar;": "\u2605", + "bigtriangledown;": "\u25bd", + "bigtriangleup;": "\u25b3", + "biguplus;": "\u2a04", + "bigvee;": "\u22c1", + "bigwedge;": "\u22c0", + "bkarow;": "\u290d", + "blacklozenge;": "\u29eb", + "blacksquare;": "\u25aa", + "blacktriangle;": "\u25b4", + "blacktriangledown;": "\u25be", + "blacktriangleleft;": "\u25c2", + "blacktriangleright;": "\u25b8", + "blank;": "\u2423", + "blk12;": "\u2592", + "blk14;": "\u2591", + "blk34;": "\u2593", + "block;": "\u2588", + "bne;": "=\u20e5", + "bnequiv;": "\u2261\u20e5", + "bnot;": "\u2310", + "bopf;": "\U0001d553", + "bot;": "\u22a5", + "bottom;": "\u22a5", + "bowtie;": "\u22c8", + "boxDL;": "\u2557", + "boxDR;": "\u2554", + "boxDl;": "\u2556", + "boxDr;": "\u2553", + "boxH;": "\u2550", + "boxHD;": "\u2566", + "boxHU;": "\u2569", + "boxHd;": "\u2564", + "boxHu;": "\u2567", + "boxUL;": "\u255d", + "boxUR;": "\u255a", + "boxUl;": "\u255c", + "boxUr;": "\u2559", + "boxV;": "\u2551", + "boxVH;": "\u256c", + "boxVL;": "\u2563", + "boxVR;": "\u2560", + "boxVh;": "\u256b", + "boxVl;": "\u2562", + "boxVr;": "\u255f", + "boxbox;": "\u29c9", + "boxdL;": "\u2555", + "boxdR;": "\u2552", + "boxdl;": "\u2510", + "boxdr;": "\u250c", + "boxh;": "\u2500", + "boxhD;": "\u2565", + "boxhU;": "\u2568", + "boxhd;": "\u252c", + "boxhu;": "\u2534", + "boxminus;": "\u229f", + "boxplus;": "\u229e", + "boxtimes;": "\u22a0", + "boxuL;": "\u255b", + "boxuR;": "\u2558", + "boxul;": "\u2518", + "boxur;": "\u2514", + "boxv;": "\u2502", + "boxvH;": "\u256a", + "boxvL;": "\u2561", + "boxvR;": "\u255e", + "boxvh;": "\u253c", + "boxvl;": "\u2524", + "boxvr;": "\u251c", + "bprime;": "\u2035", + "breve;": "\u02d8", + "brvbar": "\xa6", + "brvbar;": "\xa6", + "bscr;": "\U0001d4b7", + "bsemi;": "\u204f", + "bsim;": "\u223d", + "bsime;": "\u22cd", + "bsol;": "\\", + "bsolb;": "\u29c5", + "bsolhsub;": "\u27c8", + "bull;": "\u2022", + "bullet;": "\u2022", + "bump;": "\u224e", + "bumpE;": "\u2aae", + "bumpe;": "\u224f", + "bumpeq;": "\u224f", + "cacute;": "\u0107", + "cap;": "\u2229", + "capand;": "\u2a44", + "capbrcup;": "\u2a49", + "capcap;": "\u2a4b", + "capcup;": "\u2a47", + "capdot;": "\u2a40", + "caps;": "\u2229\ufe00", + "caret;": "\u2041", + "caron;": "\u02c7", + "ccaps;": "\u2a4d", + "ccaron;": "\u010d", + "ccedil": "\xe7", + "ccedil;": "\xe7", + "ccirc;": "\u0109", + "ccups;": "\u2a4c", + "ccupssm;": "\u2a50", + "cdot;": "\u010b", + "cedil": "\xb8", + "cedil;": "\xb8", + "cemptyv;": "\u29b2", + "cent": "\xa2", + "cent;": "\xa2", + "centerdot;": "\xb7", + "cfr;": "\U0001d520", + "chcy;": "\u0447", + "check;": "\u2713", + "checkmark;": "\u2713", + "chi;": "\u03c7", + "cir;": "\u25cb", + "cirE;": "\u29c3", + "circ;": "\u02c6", + "circeq;": "\u2257", + "circlearrowleft;": "\u21ba", + "circlearrowright;": "\u21bb", + "circledR;": "\xae", + "circledS;": "\u24c8", + "circledast;": "\u229b", + "circledcirc;": "\u229a", + "circleddash;": "\u229d", + "cire;": "\u2257", + "cirfnint;": "\u2a10", + "cirmid;": "\u2aef", + "cirscir;": "\u29c2", + "clubs;": "\u2663", + "clubsuit;": "\u2663", + "colon;": ":", + "colone;": "\u2254", + "coloneq;": "\u2254", + "comma;": ",", + "commat;": "@", + "comp;": "\u2201", + "compfn;": "\u2218", + "complement;": "\u2201", + "complexes;": "\u2102", + "cong;": "\u2245", + "congdot;": "\u2a6d", + "conint;": "\u222e", + "copf;": "\U0001d554", + "coprod;": "\u2210", + "copy": "\xa9", + "copy;": "\xa9", + "copysr;": "\u2117", + "crarr;": "\u21b5", + "cross;": "\u2717", + "cscr;": "\U0001d4b8", + "csub;": "\u2acf", + "csube;": "\u2ad1", + "csup;": "\u2ad0", + "csupe;": "\u2ad2", + "ctdot;": "\u22ef", + "cudarrl;": "\u2938", + "cudarrr;": "\u2935", + "cuepr;": "\u22de", + "cuesc;": "\u22df", + "cularr;": "\u21b6", + "cularrp;": "\u293d", + "cup;": "\u222a", + "cupbrcap;": "\u2a48", + "cupcap;": "\u2a46", + "cupcup;": "\u2a4a", + "cupdot;": "\u228d", + "cupor;": "\u2a45", + "cups;": "\u222a\ufe00", + "curarr;": "\u21b7", + "curarrm;": "\u293c", + "curlyeqprec;": "\u22de", + "curlyeqsucc;": "\u22df", + "curlyvee;": "\u22ce", + "curlywedge;": "\u22cf", + "curren": "\xa4", + "curren;": "\xa4", + "curvearrowleft;": "\u21b6", + "curvearrowright;": "\u21b7", + "cuvee;": "\u22ce", + "cuwed;": "\u22cf", + "cwconint;": "\u2232", + "cwint;": "\u2231", + "cylcty;": "\u232d", + "dArr;": "\u21d3", + "dHar;": "\u2965", + "dagger;": "\u2020", + "daleth;": "\u2138", + "darr;": "\u2193", + "dash;": "\u2010", + "dashv;": "\u22a3", + "dbkarow;": "\u290f", + "dblac;": "\u02dd", + "dcaron;": "\u010f", + "dcy;": "\u0434", + "dd;": "\u2146", + "ddagger;": "\u2021", + "ddarr;": "\u21ca", + "ddotseq;": "\u2a77", + "deg": "\xb0", + "deg;": "\xb0", + "delta;": "\u03b4", + "demptyv;": "\u29b1", + "dfisht;": "\u297f", + "dfr;": "\U0001d521", + "dharl;": "\u21c3", + "dharr;": "\u21c2", + "diam;": "\u22c4", + "diamond;": "\u22c4", + "diamondsuit;": "\u2666", + "diams;": "\u2666", + "die;": "\xa8", + "digamma;": "\u03dd", + "disin;": "\u22f2", + "div;": "\xf7", + "divide": "\xf7", + "divide;": "\xf7", + "divideontimes;": "\u22c7", + "divonx;": "\u22c7", + "djcy;": "\u0452", + "dlcorn;": "\u231e", + "dlcrop;": "\u230d", + "dollar;": "$", + "dopf;": "\U0001d555", + "dot;": "\u02d9", + "doteq;": "\u2250", + "doteqdot;": "\u2251", + "dotminus;": "\u2238", + "dotplus;": "\u2214", + "dotsquare;": "\u22a1", + "doublebarwedge;": "\u2306", + "downarrow;": "\u2193", + "downdownarrows;": "\u21ca", + "downharpoonleft;": "\u21c3", + "downharpoonright;": "\u21c2", + "drbkarow;": "\u2910", + "drcorn;": "\u231f", + "drcrop;": "\u230c", + "dscr;": "\U0001d4b9", + "dscy;": "\u0455", + "dsol;": "\u29f6", + "dstrok;": "\u0111", + "dtdot;": "\u22f1", + "dtri;": "\u25bf", + "dtrif;": "\u25be", + "duarr;": "\u21f5", + "duhar;": "\u296f", + "dwangle;": "\u29a6", + "dzcy;": "\u045f", + "dzigrarr;": "\u27ff", + "eDDot;": "\u2a77", + "eDot;": "\u2251", + "eacute": "\xe9", + "eacute;": "\xe9", + "easter;": "\u2a6e", + "ecaron;": "\u011b", + "ecir;": "\u2256", + "ecirc": "\xea", + "ecirc;": "\xea", + "ecolon;": "\u2255", + "ecy;": "\u044d", + "edot;": "\u0117", + "ee;": "\u2147", + "efDot;": "\u2252", + "efr;": "\U0001d522", + "eg;": "\u2a9a", + "egrave": "\xe8", + "egrave;": "\xe8", + "egs;": "\u2a96", + "egsdot;": "\u2a98", + "el;": "\u2a99", + "elinters;": "\u23e7", + "ell;": "\u2113", + "els;": "\u2a95", + "elsdot;": "\u2a97", + "emacr;": "\u0113", + "empty;": "\u2205", + "emptyset;": "\u2205", + "emptyv;": "\u2205", + "emsp13;": "\u2004", + "emsp14;": "\u2005", + "emsp;": "\u2003", + "eng;": "\u014b", + "ensp;": "\u2002", + "eogon;": "\u0119", + "eopf;": "\U0001d556", + "epar;": "\u22d5", + "eparsl;": "\u29e3", + "eplus;": "\u2a71", + "epsi;": "\u03b5", + "epsilon;": "\u03b5", + "epsiv;": "\u03f5", + "eqcirc;": "\u2256", + "eqcolon;": "\u2255", + "eqsim;": "\u2242", + "eqslantgtr;": "\u2a96", + "eqslantless;": "\u2a95", + "equals;": "=", + "equest;": "\u225f", + "equiv;": "\u2261", + "equivDD;": "\u2a78", + "eqvparsl;": "\u29e5", + "erDot;": "\u2253", + "erarr;": "\u2971", + "escr;": "\u212f", + "esdot;": "\u2250", + "esim;": "\u2242", + "eta;": "\u03b7", + "eth": "\xf0", + "eth;": "\xf0", + "euml": "\xeb", + "euml;": "\xeb", + "euro;": "\u20ac", + "excl;": "!", + "exist;": "\u2203", + "expectation;": "\u2130", + "exponentiale;": "\u2147", + "fallingdotseq;": "\u2252", + "fcy;": "\u0444", + "female;": "\u2640", + "ffilig;": "\ufb03", + "fflig;": "\ufb00", + "ffllig;": "\ufb04", + "ffr;": "\U0001d523", + "filig;": "\ufb01", + "fjlig;": "fj", + "flat;": "\u266d", + "fllig;": "\ufb02", + "fltns;": "\u25b1", + "fnof;": "\u0192", + "fopf;": "\U0001d557", + "forall;": "\u2200", + "fork;": "\u22d4", + "forkv;": "\u2ad9", + "fpartint;": "\u2a0d", + "frac12": "\xbd", + "frac12;": "\xbd", + "frac13;": "\u2153", + "frac14": "\xbc", + "frac14;": "\xbc", + "frac15;": "\u2155", + "frac16;": "\u2159", + "frac18;": "\u215b", + "frac23;": "\u2154", + "frac25;": "\u2156", + "frac34": "\xbe", + "frac34;": "\xbe", + "frac35;": "\u2157", + "frac38;": "\u215c", + "frac45;": "\u2158", + "frac56;": "\u215a", + "frac58;": "\u215d", + "frac78;": "\u215e", + "frasl;": "\u2044", + "frown;": "\u2322", + "fscr;": "\U0001d4bb", + "gE;": "\u2267", + "gEl;": "\u2a8c", + "gacute;": "\u01f5", + "gamma;": "\u03b3", + "gammad;": "\u03dd", + "gap;": "\u2a86", + "gbreve;": "\u011f", + "gcirc;": "\u011d", + "gcy;": "\u0433", + "gdot;": "\u0121", + "ge;": "\u2265", + "gel;": "\u22db", + "geq;": "\u2265", + "geqq;": "\u2267", + "geqslant;": "\u2a7e", + "ges;": "\u2a7e", + "gescc;": "\u2aa9", + "gesdot;": "\u2a80", + "gesdoto;": "\u2a82", + "gesdotol;": "\u2a84", + "gesl;": "\u22db\ufe00", + "gesles;": "\u2a94", + "gfr;": "\U0001d524", + "gg;": "\u226b", + "ggg;": "\u22d9", + "gimel;": "\u2137", + "gjcy;": "\u0453", + "gl;": "\u2277", + "glE;": "\u2a92", + "gla;": "\u2aa5", + "glj;": "\u2aa4", + "gnE;": "\u2269", + "gnap;": "\u2a8a", + "gnapprox;": "\u2a8a", + "gne;": "\u2a88", + "gneq;": "\u2a88", + "gneqq;": "\u2269", + "gnsim;": "\u22e7", + "gopf;": "\U0001d558", + "grave;": "`", + "gscr;": "\u210a", + "gsim;": "\u2273", + "gsime;": "\u2a8e", + "gsiml;": "\u2a90", + "gt": ">", + "gt;": ">", + "gtcc;": "\u2aa7", + "gtcir;": "\u2a7a", + "gtdot;": "\u22d7", + "gtlPar;": "\u2995", + "gtquest;": "\u2a7c", + "gtrapprox;": "\u2a86", + "gtrarr;": "\u2978", + "gtrdot;": "\u22d7", + "gtreqless;": "\u22db", + "gtreqqless;": "\u2a8c", + "gtrless;": "\u2277", + "gtrsim;": "\u2273", + "gvertneqq;": "\u2269\ufe00", + "gvnE;": "\u2269\ufe00", + "hArr;": "\u21d4", + "hairsp;": "\u200a", + "half;": "\xbd", + "hamilt;": "\u210b", + "hardcy;": "\u044a", + "harr;": "\u2194", + "harrcir;": "\u2948", + "harrw;": "\u21ad", + "hbar;": "\u210f", + "hcirc;": "\u0125", + "hearts;": "\u2665", + "heartsuit;": "\u2665", + "hellip;": "\u2026", + "hercon;": "\u22b9", + "hfr;": "\U0001d525", + "hksearow;": "\u2925", + "hkswarow;": "\u2926", + "hoarr;": "\u21ff", + "homtht;": "\u223b", + "hookleftarrow;": "\u21a9", + "hookrightarrow;": "\u21aa", + "hopf;": "\U0001d559", + "horbar;": "\u2015", + "hscr;": "\U0001d4bd", + "hslash;": "\u210f", + "hstrok;": "\u0127", + "hybull;": "\u2043", + "hyphen;": "\u2010", + "iacute": "\xed", + "iacute;": "\xed", + "ic;": "\u2063", + "icirc": "\xee", + "icirc;": "\xee", + "icy;": "\u0438", + "iecy;": "\u0435", + "iexcl": "\xa1", + "iexcl;": "\xa1", + "iff;": "\u21d4", + "ifr;": "\U0001d526", + "igrave": "\xec", + "igrave;": "\xec", + "ii;": "\u2148", + "iiiint;": "\u2a0c", + "iiint;": "\u222d", + "iinfin;": "\u29dc", + "iiota;": "\u2129", + "ijlig;": "\u0133", + "imacr;": "\u012b", + "image;": "\u2111", + "imagline;": "\u2110", + "imagpart;": "\u2111", + "imath;": "\u0131", + "imof;": "\u22b7", + "imped;": "\u01b5", + "in;": "\u2208", + "incare;": "\u2105", + "infin;": "\u221e", + "infintie;": "\u29dd", + "inodot;": "\u0131", + "int;": "\u222b", + "intcal;": "\u22ba", + "integers;": "\u2124", + "intercal;": "\u22ba", + "intlarhk;": "\u2a17", + "intprod;": "\u2a3c", + "iocy;": "\u0451", + "iogon;": "\u012f", + "iopf;": "\U0001d55a", + "iota;": "\u03b9", + "iprod;": "\u2a3c", + "iquest": "\xbf", + "iquest;": "\xbf", + "iscr;": "\U0001d4be", + "isin;": "\u2208", + "isinE;": "\u22f9", + "isindot;": "\u22f5", + "isins;": "\u22f4", + "isinsv;": "\u22f3", + "isinv;": "\u2208", + "it;": "\u2062", + "itilde;": "\u0129", + "iukcy;": "\u0456", + "iuml": "\xef", + "iuml;": "\xef", + "jcirc;": "\u0135", + "jcy;": "\u0439", + "jfr;": "\U0001d527", + "jmath;": "\u0237", + "jopf;": "\U0001d55b", + "jscr;": "\U0001d4bf", + "jsercy;": "\u0458", + "jukcy;": "\u0454", + "kappa;": "\u03ba", + "kappav;": "\u03f0", + "kcedil;": "\u0137", + "kcy;": "\u043a", + "kfr;": "\U0001d528", + "kgreen;": "\u0138", + "khcy;": "\u0445", + "kjcy;": "\u045c", + "kopf;": "\U0001d55c", + "kscr;": "\U0001d4c0", + "lAarr;": "\u21da", + "lArr;": "\u21d0", + "lAtail;": "\u291b", + "lBarr;": "\u290e", + "lE;": "\u2266", + "lEg;": "\u2a8b", + "lHar;": "\u2962", + "lacute;": "\u013a", + "laemptyv;": "\u29b4", + "lagran;": "\u2112", + "lambda;": "\u03bb", + "lang;": "\u27e8", + "langd;": "\u2991", + "langle;": "\u27e8", + "lap;": "\u2a85", + "laquo": "\xab", + "laquo;": "\xab", + "larr;": "\u2190", + "larrb;": "\u21e4", + "larrbfs;": "\u291f", + "larrfs;": "\u291d", + "larrhk;": "\u21a9", + "larrlp;": "\u21ab", + "larrpl;": "\u2939", + "larrsim;": "\u2973", + "larrtl;": "\u21a2", + "lat;": "\u2aab", + "latail;": "\u2919", + "late;": "\u2aad", + "lates;": "\u2aad\ufe00", + "lbarr;": "\u290c", + "lbbrk;": "\u2772", + "lbrace;": "{", + "lbrack;": "[", + "lbrke;": "\u298b", + "lbrksld;": "\u298f", + "lbrkslu;": "\u298d", + "lcaron;": "\u013e", + "lcedil;": "\u013c", + "lceil;": "\u2308", + "lcub;": "{", + "lcy;": "\u043b", + "ldca;": "\u2936", + "ldquo;": "\u201c", + "ldquor;": "\u201e", + "ldrdhar;": "\u2967", + "ldrushar;": "\u294b", + "ldsh;": "\u21b2", + "le;": "\u2264", + "leftarrow;": "\u2190", + "leftarrowtail;": "\u21a2", + "leftharpoondown;": "\u21bd", + "leftharpoonup;": "\u21bc", + "leftleftarrows;": "\u21c7", + "leftrightarrow;": "\u2194", + "leftrightarrows;": "\u21c6", + "leftrightharpoons;": "\u21cb", + "leftrightsquigarrow;": "\u21ad", + "leftthreetimes;": "\u22cb", + "leg;": "\u22da", + "leq;": "\u2264", + "leqq;": "\u2266", + "leqslant;": "\u2a7d", + "les;": "\u2a7d", + "lescc;": "\u2aa8", + "lesdot;": "\u2a7f", + "lesdoto;": "\u2a81", + "lesdotor;": "\u2a83", + "lesg;": "\u22da\ufe00", + "lesges;": "\u2a93", + "lessapprox;": "\u2a85", + "lessdot;": "\u22d6", + "lesseqgtr;": "\u22da", + "lesseqqgtr;": "\u2a8b", + "lessgtr;": "\u2276", + "lesssim;": "\u2272", + "lfisht;": "\u297c", + "lfloor;": "\u230a", + "lfr;": "\U0001d529", + "lg;": "\u2276", + "lgE;": "\u2a91", + "lhard;": "\u21bd", + "lharu;": "\u21bc", + "lharul;": "\u296a", + "lhblk;": "\u2584", + "ljcy;": "\u0459", + "ll;": "\u226a", + "llarr;": "\u21c7", + "llcorner;": "\u231e", + "llhard;": "\u296b", + "lltri;": "\u25fa", + "lmidot;": "\u0140", + "lmoust;": "\u23b0", + "lmoustache;": "\u23b0", + "lnE;": "\u2268", + "lnap;": "\u2a89", + "lnapprox;": "\u2a89", + "lne;": "\u2a87", + "lneq;": "\u2a87", + "lneqq;": "\u2268", + "lnsim;": "\u22e6", + "loang;": "\u27ec", + "loarr;": "\u21fd", + "lobrk;": "\u27e6", + "longleftarrow;": "\u27f5", + "longleftrightarrow;": "\u27f7", + "longmapsto;": "\u27fc", + "longrightarrow;": "\u27f6", + "looparrowleft;": "\u21ab", + "looparrowright;": "\u21ac", + "lopar;": "\u2985", + "lopf;": "\U0001d55d", + "loplus;": "\u2a2d", + "lotimes;": "\u2a34", + "lowast;": "\u2217", + "lowbar;": "_", + "loz;": "\u25ca", + "lozenge;": "\u25ca", + "lozf;": "\u29eb", + "lpar;": "(", + "lparlt;": "\u2993", + "lrarr;": "\u21c6", + "lrcorner;": "\u231f", + "lrhar;": "\u21cb", + "lrhard;": "\u296d", + "lrm;": "\u200e", + "lrtri;": "\u22bf", + "lsaquo;": "\u2039", + "lscr;": "\U0001d4c1", + "lsh;": "\u21b0", + "lsim;": "\u2272", + "lsime;": "\u2a8d", + "lsimg;": "\u2a8f", + "lsqb;": "[", + "lsquo;": "\u2018", + "lsquor;": "\u201a", + "lstrok;": "\u0142", + "lt": "<", + "lt;": "<", + "ltcc;": "\u2aa6", + "ltcir;": "\u2a79", + "ltdot;": "\u22d6", + "lthree;": "\u22cb", + "ltimes;": "\u22c9", + "ltlarr;": "\u2976", + "ltquest;": "\u2a7b", + "ltrPar;": "\u2996", + "ltri;": "\u25c3", + "ltrie;": "\u22b4", + "ltrif;": "\u25c2", + "lurdshar;": "\u294a", + "luruhar;": "\u2966", + "lvertneqq;": "\u2268\ufe00", + "lvnE;": "\u2268\ufe00", + "mDDot;": "\u223a", + "macr": "\xaf", + "macr;": "\xaf", + "male;": "\u2642", + "malt;": "\u2720", + "maltese;": "\u2720", + "map;": "\u21a6", + "mapsto;": "\u21a6", + "mapstodown;": "\u21a7", + "mapstoleft;": "\u21a4", + "mapstoup;": "\u21a5", + "marker;": "\u25ae", + "mcomma;": "\u2a29", + "mcy;": "\u043c", + "mdash;": "\u2014", + "measuredangle;": "\u2221", + "mfr;": "\U0001d52a", + "mho;": "\u2127", + "micro": "\xb5", + "micro;": "\xb5", + "mid;": "\u2223", + "midast;": "*", + "midcir;": "\u2af0", + "middot": "\xb7", + "middot;": "\xb7", + "minus;": "\u2212", + "minusb;": "\u229f", + "minusd;": "\u2238", + "minusdu;": "\u2a2a", + "mlcp;": "\u2adb", + "mldr;": "\u2026", + "mnplus;": "\u2213", + "models;": "\u22a7", + "mopf;": "\U0001d55e", + "mp;": "\u2213", + "mscr;": "\U0001d4c2", + "mstpos;": "\u223e", + "mu;": "\u03bc", + "multimap;": "\u22b8", + "mumap;": "\u22b8", + "nGg;": "\u22d9\u0338", + "nGt;": "\u226b\u20d2", + "nGtv;": "\u226b\u0338", + "nLeftarrow;": "\u21cd", + "nLeftrightarrow;": "\u21ce", + "nLl;": "\u22d8\u0338", + "nLt;": "\u226a\u20d2", + "nLtv;": "\u226a\u0338", + "nRightarrow;": "\u21cf", + "nVDash;": "\u22af", + "nVdash;": "\u22ae", + "nabla;": "\u2207", + "nacute;": "\u0144", + "nang;": "\u2220\u20d2", + "nap;": "\u2249", + "napE;": "\u2a70\u0338", + "napid;": "\u224b\u0338", + "napos;": "\u0149", + "napprox;": "\u2249", + "natur;": "\u266e", + "natural;": "\u266e", + "naturals;": "\u2115", + "nbsp": "\xa0", + "nbsp;": "\xa0", + "nbump;": "\u224e\u0338", + "nbumpe;": "\u224f\u0338", + "ncap;": "\u2a43", + "ncaron;": "\u0148", + "ncedil;": "\u0146", + "ncong;": "\u2247", + "ncongdot;": "\u2a6d\u0338", + "ncup;": "\u2a42", + "ncy;": "\u043d", + "ndash;": "\u2013", + "ne;": "\u2260", + "neArr;": "\u21d7", + "nearhk;": "\u2924", + "nearr;": "\u2197", + "nearrow;": "\u2197", + "nedot;": "\u2250\u0338", + "nequiv;": "\u2262", + "nesear;": "\u2928", + "nesim;": "\u2242\u0338", + "nexist;": "\u2204", + "nexists;": "\u2204", + "nfr;": "\U0001d52b", + "ngE;": "\u2267\u0338", + "nge;": "\u2271", + "ngeq;": "\u2271", + "ngeqq;": "\u2267\u0338", + "ngeqslant;": "\u2a7e\u0338", + "nges;": "\u2a7e\u0338", + "ngsim;": "\u2275", + "ngt;": "\u226f", + "ngtr;": "\u226f", + "nhArr;": "\u21ce", + "nharr;": "\u21ae", + "nhpar;": "\u2af2", + "ni;": "\u220b", + "nis;": "\u22fc", + "nisd;": "\u22fa", + "niv;": "\u220b", + "njcy;": "\u045a", + "nlArr;": "\u21cd", + "nlE;": "\u2266\u0338", + "nlarr;": "\u219a", + "nldr;": "\u2025", + "nle;": "\u2270", + "nleftarrow;": "\u219a", + "nleftrightarrow;": "\u21ae", + "nleq;": "\u2270", + "nleqq;": "\u2266\u0338", + "nleqslant;": "\u2a7d\u0338", + "nles;": "\u2a7d\u0338", + "nless;": "\u226e", + "nlsim;": "\u2274", + "nlt;": "\u226e", + "nltri;": "\u22ea", + "nltrie;": "\u22ec", + "nmid;": "\u2224", + "nopf;": "\U0001d55f", + "not": "\xac", + "not;": "\xac", + "notin;": "\u2209", + "notinE;": "\u22f9\u0338", + "notindot;": "\u22f5\u0338", + "notinva;": "\u2209", + "notinvb;": "\u22f7", + "notinvc;": "\u22f6", + "notni;": "\u220c", + "notniva;": "\u220c", + "notnivb;": "\u22fe", + "notnivc;": "\u22fd", + "npar;": "\u2226", + "nparallel;": "\u2226", + "nparsl;": "\u2afd\u20e5", + "npart;": "\u2202\u0338", + "npolint;": "\u2a14", + "npr;": "\u2280", + "nprcue;": "\u22e0", + "npre;": "\u2aaf\u0338", + "nprec;": "\u2280", + "npreceq;": "\u2aaf\u0338", + "nrArr;": "\u21cf", + "nrarr;": "\u219b", + "nrarrc;": "\u2933\u0338", + "nrarrw;": "\u219d\u0338", + "nrightarrow;": "\u219b", + "nrtri;": "\u22eb", + "nrtrie;": "\u22ed", + "nsc;": "\u2281", + "nsccue;": "\u22e1", + "nsce;": "\u2ab0\u0338", + "nscr;": "\U0001d4c3", + "nshortmid;": "\u2224", + "nshortparallel;": "\u2226", + "nsim;": "\u2241", + "nsime;": "\u2244", + "nsimeq;": "\u2244", + "nsmid;": "\u2224", + "nspar;": "\u2226", + "nsqsube;": "\u22e2", + "nsqsupe;": "\u22e3", + "nsub;": "\u2284", + "nsubE;": "\u2ac5\u0338", + "nsube;": "\u2288", + "nsubset;": "\u2282\u20d2", + "nsubseteq;": "\u2288", + "nsubseteqq;": "\u2ac5\u0338", + "nsucc;": "\u2281", + "nsucceq;": "\u2ab0\u0338", + "nsup;": "\u2285", + "nsupE;": "\u2ac6\u0338", + "nsupe;": "\u2289", + "nsupset;": "\u2283\u20d2", + "nsupseteq;": "\u2289", + "nsupseteqq;": "\u2ac6\u0338", + "ntgl;": "\u2279", + "ntilde": "\xf1", + "ntilde;": "\xf1", + "ntlg;": "\u2278", + "ntriangleleft;": "\u22ea", + "ntrianglelefteq;": "\u22ec", + "ntriangleright;": "\u22eb", + "ntrianglerighteq;": "\u22ed", + "nu;": "\u03bd", + "num;": "#", + "numero;": "\u2116", + "numsp;": "\u2007", + "nvDash;": "\u22ad", + "nvHarr;": "\u2904", + "nvap;": "\u224d\u20d2", + "nvdash;": "\u22ac", + "nvge;": "\u2265\u20d2", + "nvgt;": ">\u20d2", + "nvinfin;": "\u29de", + "nvlArr;": "\u2902", + "nvle;": "\u2264\u20d2", + "nvlt;": "<\u20d2", + "nvltrie;": "\u22b4\u20d2", + "nvrArr;": "\u2903", + "nvrtrie;": "\u22b5\u20d2", + "nvsim;": "\u223c\u20d2", + "nwArr;": "\u21d6", + "nwarhk;": "\u2923", + "nwarr;": "\u2196", + "nwarrow;": "\u2196", + "nwnear;": "\u2927", + "oS;": "\u24c8", + "oacute": "\xf3", + "oacute;": "\xf3", + "oast;": "\u229b", + "ocir;": "\u229a", + "ocirc": "\xf4", + "ocirc;": "\xf4", + "ocy;": "\u043e", + "odash;": "\u229d", + "odblac;": "\u0151", + "odiv;": "\u2a38", + "odot;": "\u2299", + "odsold;": "\u29bc", + "oelig;": "\u0153", + "ofcir;": "\u29bf", + "ofr;": "\U0001d52c", + "ogon;": "\u02db", + "ograve": "\xf2", + "ograve;": "\xf2", + "ogt;": "\u29c1", + "ohbar;": "\u29b5", + "ohm;": "\u03a9", + "oint;": "\u222e", + "olarr;": "\u21ba", + "olcir;": "\u29be", + "olcross;": "\u29bb", + "oline;": "\u203e", + "olt;": "\u29c0", + "omacr;": "\u014d", + "omega;": "\u03c9", + "omicron;": "\u03bf", + "omid;": "\u29b6", + "ominus;": "\u2296", + "oopf;": "\U0001d560", + "opar;": "\u29b7", + "operp;": "\u29b9", + "oplus;": "\u2295", + "or;": "\u2228", + "orarr;": "\u21bb", + "ord;": "\u2a5d", + "order;": "\u2134", + "orderof;": "\u2134", + "ordf": "\xaa", + "ordf;": "\xaa", + "ordm": "\xba", + "ordm;": "\xba", + "origof;": "\u22b6", + "oror;": "\u2a56", + "orslope;": "\u2a57", + "orv;": "\u2a5b", + "oscr;": "\u2134", + "oslash": "\xf8", + "oslash;": "\xf8", + "osol;": "\u2298", + "otilde": "\xf5", + "otilde;": "\xf5", + "otimes;": "\u2297", + "otimesas;": "\u2a36", + "ouml": "\xf6", + "ouml;": "\xf6", + "ovbar;": "\u233d", + "par;": "\u2225", + "para": "\xb6", + "para;": "\xb6", + "parallel;": "\u2225", + "parsim;": "\u2af3", + "parsl;": "\u2afd", + "part;": "\u2202", + "pcy;": "\u043f", + "percnt;": "%", + "period;": ".", + "permil;": "\u2030", + "perp;": "\u22a5", + "pertenk;": "\u2031", + "pfr;": "\U0001d52d", + "phi;": "\u03c6", + "phiv;": "\u03d5", + "phmmat;": "\u2133", + "phone;": "\u260e", + "pi;": "\u03c0", + "pitchfork;": "\u22d4", + "piv;": "\u03d6", + "planck;": "\u210f", + "planckh;": "\u210e", + "plankv;": "\u210f", + "plus;": "+", + "plusacir;": "\u2a23", + "plusb;": "\u229e", + "pluscir;": "\u2a22", + "plusdo;": "\u2214", + "plusdu;": "\u2a25", + "pluse;": "\u2a72", + "plusmn": "\xb1", + "plusmn;": "\xb1", + "plussim;": "\u2a26", + "plustwo;": "\u2a27", + "pm;": "\xb1", + "pointint;": "\u2a15", + "popf;": "\U0001d561", + "pound": "\xa3", + "pound;": "\xa3", + "pr;": "\u227a", + "prE;": "\u2ab3", + "prap;": "\u2ab7", + "prcue;": "\u227c", + "pre;": "\u2aaf", + "prec;": "\u227a", + "precapprox;": "\u2ab7", + "preccurlyeq;": "\u227c", + "preceq;": "\u2aaf", + "precnapprox;": "\u2ab9", + "precneqq;": "\u2ab5", + "precnsim;": "\u22e8", + "precsim;": "\u227e", + "prime;": "\u2032", + "primes;": "\u2119", + "prnE;": "\u2ab5", + "prnap;": "\u2ab9", + "prnsim;": "\u22e8", + "prod;": "\u220f", + "profalar;": "\u232e", + "profline;": "\u2312", + "profsurf;": "\u2313", + "prop;": "\u221d", + "propto;": "\u221d", + "prsim;": "\u227e", + "prurel;": "\u22b0", + "pscr;": "\U0001d4c5", + "psi;": "\u03c8", + "puncsp;": "\u2008", + "qfr;": "\U0001d52e", + "qint;": "\u2a0c", + "qopf;": "\U0001d562", + "qprime;": "\u2057", + "qscr;": "\U0001d4c6", + "quaternions;": "\u210d", + "quatint;": "\u2a16", + "quest;": "?", + "questeq;": "\u225f", + "quot": "\"", + "quot;": "\"", + "rAarr;": "\u21db", + "rArr;": "\u21d2", + "rAtail;": "\u291c", + "rBarr;": "\u290f", + "rHar;": "\u2964", + "race;": "\u223d\u0331", + "racute;": "\u0155", + "radic;": "\u221a", + "raemptyv;": "\u29b3", + "rang;": "\u27e9", + "rangd;": "\u2992", + "range;": "\u29a5", + "rangle;": "\u27e9", + "raquo": "\xbb", + "raquo;": "\xbb", + "rarr;": "\u2192", + "rarrap;": "\u2975", + "rarrb;": "\u21e5", + "rarrbfs;": "\u2920", + "rarrc;": "\u2933", + "rarrfs;": "\u291e", + "rarrhk;": "\u21aa", + "rarrlp;": "\u21ac", + "rarrpl;": "\u2945", + "rarrsim;": "\u2974", + "rarrtl;": "\u21a3", + "rarrw;": "\u219d", + "ratail;": "\u291a", + "ratio;": "\u2236", + "rationals;": "\u211a", + "rbarr;": "\u290d", + "rbbrk;": "\u2773", + "rbrace;": "}", + "rbrack;": "]", + "rbrke;": "\u298c", + "rbrksld;": "\u298e", + "rbrkslu;": "\u2990", + "rcaron;": "\u0159", + "rcedil;": "\u0157", + "rceil;": "\u2309", + "rcub;": "}", + "rcy;": "\u0440", + "rdca;": "\u2937", + "rdldhar;": "\u2969", + "rdquo;": "\u201d", + "rdquor;": "\u201d", + "rdsh;": "\u21b3", + "real;": "\u211c", + "realine;": "\u211b", + "realpart;": "\u211c", + "reals;": "\u211d", + "rect;": "\u25ad", + "reg": "\xae", + "reg;": "\xae", + "rfisht;": "\u297d", + "rfloor;": "\u230b", + "rfr;": "\U0001d52f", + "rhard;": "\u21c1", + "rharu;": "\u21c0", + "rharul;": "\u296c", + "rho;": "\u03c1", + "rhov;": "\u03f1", + "rightarrow;": "\u2192", + "rightarrowtail;": "\u21a3", + "rightharpoondown;": "\u21c1", + "rightharpoonup;": "\u21c0", + "rightleftarrows;": "\u21c4", + "rightleftharpoons;": "\u21cc", + "rightrightarrows;": "\u21c9", + "rightsquigarrow;": "\u219d", + "rightthreetimes;": "\u22cc", + "ring;": "\u02da", + "risingdotseq;": "\u2253", + "rlarr;": "\u21c4", + "rlhar;": "\u21cc", + "rlm;": "\u200f", + "rmoust;": "\u23b1", + "rmoustache;": "\u23b1", + "rnmid;": "\u2aee", + "roang;": "\u27ed", + "roarr;": "\u21fe", + "robrk;": "\u27e7", + "ropar;": "\u2986", + "ropf;": "\U0001d563", + "roplus;": "\u2a2e", + "rotimes;": "\u2a35", + "rpar;": ")", + "rpargt;": "\u2994", + "rppolint;": "\u2a12", + "rrarr;": "\u21c9", + "rsaquo;": "\u203a", + "rscr;": "\U0001d4c7", + "rsh;": "\u21b1", + "rsqb;": "]", + "rsquo;": "\u2019", + "rsquor;": "\u2019", + "rthree;": "\u22cc", + "rtimes;": "\u22ca", + "rtri;": "\u25b9", + "rtrie;": "\u22b5", + "rtrif;": "\u25b8", + "rtriltri;": "\u29ce", + "ruluhar;": "\u2968", + "rx;": "\u211e", + "sacute;": "\u015b", + "sbquo;": "\u201a", + "sc;": "\u227b", + "scE;": "\u2ab4", + "scap;": "\u2ab8", + "scaron;": "\u0161", + "sccue;": "\u227d", + "sce;": "\u2ab0", + "scedil;": "\u015f", + "scirc;": "\u015d", + "scnE;": "\u2ab6", + "scnap;": "\u2aba", + "scnsim;": "\u22e9", + "scpolint;": "\u2a13", + "scsim;": "\u227f", + "scy;": "\u0441", + "sdot;": "\u22c5", + "sdotb;": "\u22a1", + "sdote;": "\u2a66", + "seArr;": "\u21d8", + "searhk;": "\u2925", + "searr;": "\u2198", + "searrow;": "\u2198", + "sect": "\xa7", + "sect;": "\xa7", + "semi;": ";", + "seswar;": "\u2929", + "setminus;": "\u2216", + "setmn;": "\u2216", + "sext;": "\u2736", + "sfr;": "\U0001d530", + "sfrown;": "\u2322", + "sharp;": "\u266f", + "shchcy;": "\u0449", + "shcy;": "\u0448", + "shortmid;": "\u2223", + "shortparallel;": "\u2225", + "shy": "\xad", + "shy;": "\xad", + "sigma;": "\u03c3", + "sigmaf;": "\u03c2", + "sigmav;": "\u03c2", + "sim;": "\u223c", + "simdot;": "\u2a6a", + "sime;": "\u2243", + "simeq;": "\u2243", + "simg;": "\u2a9e", + "simgE;": "\u2aa0", + "siml;": "\u2a9d", + "simlE;": "\u2a9f", + "simne;": "\u2246", + "simplus;": "\u2a24", + "simrarr;": "\u2972", + "slarr;": "\u2190", + "smallsetminus;": "\u2216", + "smashp;": "\u2a33", + "smeparsl;": "\u29e4", + "smid;": "\u2223", + "smile;": "\u2323", + "smt;": "\u2aaa", + "smte;": "\u2aac", + "smtes;": "\u2aac\ufe00", + "softcy;": "\u044c", + "sol;": "/", + "solb;": "\u29c4", + "solbar;": "\u233f", + "sopf;": "\U0001d564", + "spades;": "\u2660", + "spadesuit;": "\u2660", + "spar;": "\u2225", + "sqcap;": "\u2293", + "sqcaps;": "\u2293\ufe00", + "sqcup;": "\u2294", + "sqcups;": "\u2294\ufe00", + "sqsub;": "\u228f", + "sqsube;": "\u2291", + "sqsubset;": "\u228f", + "sqsubseteq;": "\u2291", + "sqsup;": "\u2290", + "sqsupe;": "\u2292", + "sqsupset;": "\u2290", + "sqsupseteq;": "\u2292", + "squ;": "\u25a1", + "square;": "\u25a1", + "squarf;": "\u25aa", + "squf;": "\u25aa", + "srarr;": "\u2192", + "sscr;": "\U0001d4c8", + "ssetmn;": "\u2216", + "ssmile;": "\u2323", + "sstarf;": "\u22c6", + "star;": "\u2606", + "starf;": "\u2605", + "straightepsilon;": "\u03f5", + "straightphi;": "\u03d5", + "strns;": "\xaf", + "sub;": "\u2282", + "subE;": "\u2ac5", + "subdot;": "\u2abd", + "sube;": "\u2286", + "subedot;": "\u2ac3", + "submult;": "\u2ac1", + "subnE;": "\u2acb", + "subne;": "\u228a", + "subplus;": "\u2abf", + "subrarr;": "\u2979", + "subset;": "\u2282", + "subseteq;": "\u2286", + "subseteqq;": "\u2ac5", + "subsetneq;": "\u228a", + "subsetneqq;": "\u2acb", + "subsim;": "\u2ac7", + "subsub;": "\u2ad5", + "subsup;": "\u2ad3", + "succ;": "\u227b", + "succapprox;": "\u2ab8", + "succcurlyeq;": "\u227d", + "succeq;": "\u2ab0", + "succnapprox;": "\u2aba", + "succneqq;": "\u2ab6", + "succnsim;": "\u22e9", + "succsim;": "\u227f", + "sum;": "\u2211", + "sung;": "\u266a", + "sup1": "\xb9", + "sup1;": "\xb9", + "sup2": "\xb2", + "sup2;": "\xb2", + "sup3": "\xb3", + "sup3;": "\xb3", + "sup;": "\u2283", + "supE;": "\u2ac6", + "supdot;": "\u2abe", + "supdsub;": "\u2ad8", + "supe;": "\u2287", + "supedot;": "\u2ac4", + "suphsol;": "\u27c9", + "suphsub;": "\u2ad7", + "suplarr;": "\u297b", + "supmult;": "\u2ac2", + "supnE;": "\u2acc", + "supne;": "\u228b", + "supplus;": "\u2ac0", + "supset;": "\u2283", + "supseteq;": "\u2287", + "supseteqq;": "\u2ac6", + "supsetneq;": "\u228b", + "supsetneqq;": "\u2acc", + "supsim;": "\u2ac8", + "supsub;": "\u2ad4", + "supsup;": "\u2ad6", + "swArr;": "\u21d9", + "swarhk;": "\u2926", + "swarr;": "\u2199", + "swarrow;": "\u2199", + "swnwar;": "\u292a", + "szlig": "\xdf", + "szlig;": "\xdf", + "target;": "\u2316", + "tau;": "\u03c4", + "tbrk;": "\u23b4", + "tcaron;": "\u0165", + "tcedil;": "\u0163", + "tcy;": "\u0442", + "tdot;": "\u20db", + "telrec;": "\u2315", + "tfr;": "\U0001d531", + "there4;": "\u2234", + "therefore;": "\u2234", + "theta;": "\u03b8", + "thetasym;": "\u03d1", + "thetav;": "\u03d1", + "thickapprox;": "\u2248", + "thicksim;": "\u223c", + "thinsp;": "\u2009", + "thkap;": "\u2248", + "thksim;": "\u223c", + "thorn": "\xfe", + "thorn;": "\xfe", + "tilde;": "\u02dc", + "times": "\xd7", + "times;": "\xd7", + "timesb;": "\u22a0", + "timesbar;": "\u2a31", + "timesd;": "\u2a30", + "tint;": "\u222d", + "toea;": "\u2928", + "top;": "\u22a4", + "topbot;": "\u2336", + "topcir;": "\u2af1", + "topf;": "\U0001d565", + "topfork;": "\u2ada", + "tosa;": "\u2929", + "tprime;": "\u2034", + "trade;": "\u2122", + "triangle;": "\u25b5", + "triangledown;": "\u25bf", + "triangleleft;": "\u25c3", + "trianglelefteq;": "\u22b4", + "triangleq;": "\u225c", + "triangleright;": "\u25b9", + "trianglerighteq;": "\u22b5", + "tridot;": "\u25ec", + "trie;": "\u225c", + "triminus;": "\u2a3a", + "triplus;": "\u2a39", + "trisb;": "\u29cd", + "tritime;": "\u2a3b", + "trpezium;": "\u23e2", + "tscr;": "\U0001d4c9", + "tscy;": "\u0446", + "tshcy;": "\u045b", + "tstrok;": "\u0167", + "twixt;": "\u226c", + "twoheadleftarrow;": "\u219e", + "twoheadrightarrow;": "\u21a0", + "uArr;": "\u21d1", + "uHar;": "\u2963", + "uacute": "\xfa", + "uacute;": "\xfa", + "uarr;": "\u2191", + "ubrcy;": "\u045e", + "ubreve;": "\u016d", + "ucirc": "\xfb", + "ucirc;": "\xfb", + "ucy;": "\u0443", + "udarr;": "\u21c5", + "udblac;": "\u0171", + "udhar;": "\u296e", + "ufisht;": "\u297e", + "ufr;": "\U0001d532", + "ugrave": "\xf9", + "ugrave;": "\xf9", + "uharl;": "\u21bf", + "uharr;": "\u21be", + "uhblk;": "\u2580", + "ulcorn;": "\u231c", + "ulcorner;": "\u231c", + "ulcrop;": "\u230f", + "ultri;": "\u25f8", + "umacr;": "\u016b", + "uml": "\xa8", + "uml;": "\xa8", + "uogon;": "\u0173", + "uopf;": "\U0001d566", + "uparrow;": "\u2191", + "updownarrow;": "\u2195", + "upharpoonleft;": "\u21bf", + "upharpoonright;": "\u21be", + "uplus;": "\u228e", + "upsi;": "\u03c5", + "upsih;": "\u03d2", + "upsilon;": "\u03c5", + "upuparrows;": "\u21c8", + "urcorn;": "\u231d", + "urcorner;": "\u231d", + "urcrop;": "\u230e", + "uring;": "\u016f", + "urtri;": "\u25f9", + "uscr;": "\U0001d4ca", + "utdot;": "\u22f0", + "utilde;": "\u0169", + "utri;": "\u25b5", + "utrif;": "\u25b4", + "uuarr;": "\u21c8", + "uuml": "\xfc", + "uuml;": "\xfc", + "uwangle;": "\u29a7", + "vArr;": "\u21d5", + "vBar;": "\u2ae8", + "vBarv;": "\u2ae9", + "vDash;": "\u22a8", + "vangrt;": "\u299c", + "varepsilon;": "\u03f5", + "varkappa;": "\u03f0", + "varnothing;": "\u2205", + "varphi;": "\u03d5", + "varpi;": "\u03d6", + "varpropto;": "\u221d", + "varr;": "\u2195", + "varrho;": "\u03f1", + "varsigma;": "\u03c2", + "varsubsetneq;": "\u228a\ufe00", + "varsubsetneqq;": "\u2acb\ufe00", + "varsupsetneq;": "\u228b\ufe00", + "varsupsetneqq;": "\u2acc\ufe00", + "vartheta;": "\u03d1", + "vartriangleleft;": "\u22b2", + "vartriangleright;": "\u22b3", + "vcy;": "\u0432", + "vdash;": "\u22a2", + "vee;": "\u2228", + "veebar;": "\u22bb", + "veeeq;": "\u225a", + "vellip;": "\u22ee", + "verbar;": "|", + "vert;": "|", + "vfr;": "\U0001d533", + "vltri;": "\u22b2", + "vnsub;": "\u2282\u20d2", + "vnsup;": "\u2283\u20d2", + "vopf;": "\U0001d567", + "vprop;": "\u221d", + "vrtri;": "\u22b3", + "vscr;": "\U0001d4cb", + "vsubnE;": "\u2acb\ufe00", + "vsubne;": "\u228a\ufe00", + "vsupnE;": "\u2acc\ufe00", + "vsupne;": "\u228b\ufe00", + "vzigzag;": "\u299a", + "wcirc;": "\u0175", + "wedbar;": "\u2a5f", + "wedge;": "\u2227", + "wedgeq;": "\u2259", + "weierp;": "\u2118", + "wfr;": "\U0001d534", + "wopf;": "\U0001d568", + "wp;": "\u2118", + "wr;": "\u2240", + "wreath;": "\u2240", + "wscr;": "\U0001d4cc", + "xcap;": "\u22c2", + "xcirc;": "\u25ef", + "xcup;": "\u22c3", + "xdtri;": "\u25bd", + "xfr;": "\U0001d535", + "xhArr;": "\u27fa", + "xharr;": "\u27f7", + "xi;": "\u03be", + "xlArr;": "\u27f8", + "xlarr;": "\u27f5", + "xmap;": "\u27fc", + "xnis;": "\u22fb", + "xodot;": "\u2a00", + "xopf;": "\U0001d569", + "xoplus;": "\u2a01", + "xotime;": "\u2a02", + "xrArr;": "\u27f9", + "xrarr;": "\u27f6", + "xscr;": "\U0001d4cd", + "xsqcup;": "\u2a06", + "xuplus;": "\u2a04", + "xutri;": "\u25b3", + "xvee;": "\u22c1", + "xwedge;": "\u22c0", + "yacute": "\xfd", + "yacute;": "\xfd", + "yacy;": "\u044f", + "ycirc;": "\u0177", + "ycy;": "\u044b", + "yen": "\xa5", + "yen;": "\xa5", + "yfr;": "\U0001d536", + "yicy;": "\u0457", + "yopf;": "\U0001d56a", + "yscr;": "\U0001d4ce", + "yucy;": "\u044e", + "yuml": "\xff", + "yuml;": "\xff", + "zacute;": "\u017a", + "zcaron;": "\u017e", + "zcy;": "\u0437", + "zdot;": "\u017c", + "zeetrf;": "\u2128", + "zeta;": "\u03b6", + "zfr;": "\U0001d537", + "zhcy;": "\u0436", + "zigrarr;": "\u21dd", + "zopf;": "\U0001d56b", + "zscr;": "\U0001d4cf", + "zwj;": "\u200d", + "zwnj;": "\u200c", +} + +replacementCharacters = { + 0x0: "\uFFFD", + 0x0d: "\u000D", + 0x80: "\u20AC", + 0x81: "\u0081", + 0x81: "\u0081", + 0x82: "\u201A", + 0x83: "\u0192", + 0x84: "\u201E", + 0x85: "\u2026", + 0x86: "\u2020", + 0x87: "\u2021", + 0x88: "\u02C6", + 0x89: "\u2030", + 0x8A: "\u0160", + 0x8B: "\u2039", + 0x8C: "\u0152", + 0x8D: "\u008D", + 0x8E: "\u017D", + 0x8F: "\u008F", + 0x90: "\u0090", + 0x91: "\u2018", + 0x92: "\u2019", + 0x93: "\u201C", + 0x94: "\u201D", + 0x95: "\u2022", + 0x96: "\u2013", + 0x97: "\u2014", + 0x98: "\u02DC", + 0x99: "\u2122", + 0x9A: "\u0161", + 0x9B: "\u203A", + 0x9C: "\u0153", + 0x9D: "\u009D", + 0x9E: "\u017E", + 0x9F: "\u0178", +} + +encodings = { + '437': 'cp437', + '850': 'cp850', + '852': 'cp852', + '855': 'cp855', + '857': 'cp857', + '860': 'cp860', + '861': 'cp861', + '862': 'cp862', + '863': 'cp863', + '865': 'cp865', + '866': 'cp866', + '869': 'cp869', + 'ansix341968': 'ascii', + 'ansix341986': 'ascii', + 'arabic': 'iso8859-6', + 'ascii': 'ascii', + 'asmo708': 'iso8859-6', + 'big5': 'big5', + 'big5hkscs': 'big5hkscs', + 'chinese': 'gbk', + 'cp037': 'cp037', + 'cp1026': 'cp1026', + 'cp154': 'ptcp154', + 'cp367': 'ascii', + 'cp424': 'cp424', + 'cp437': 'cp437', + 'cp500': 'cp500', + 'cp775': 'cp775', + 'cp819': 'windows-1252', + 'cp850': 'cp850', + 'cp852': 'cp852', + 'cp855': 'cp855', + 'cp857': 'cp857', + 'cp860': 'cp860', + 'cp861': 'cp861', + 'cp862': 'cp862', + 'cp863': 'cp863', + 'cp864': 'cp864', + 'cp865': 'cp865', + 'cp866': 'cp866', + 'cp869': 'cp869', + 'cp936': 'gbk', + 'cpgr': 'cp869', + 'cpis': 'cp861', + 'csascii': 'ascii', + 'csbig5': 'big5', + 'cseuckr': 'cp949', + 'cseucpkdfmtjapanese': 'euc_jp', + 'csgb2312': 'gbk', + 'cshproman8': 'hp-roman8', + 'csibm037': 'cp037', + 'csibm1026': 'cp1026', + 'csibm424': 'cp424', + 'csibm500': 'cp500', + 'csibm855': 'cp855', + 'csibm857': 'cp857', + 'csibm860': 'cp860', + 'csibm861': 'cp861', + 'csibm863': 'cp863', + 'csibm864': 'cp864', + 'csibm865': 'cp865', + 'csibm866': 'cp866', + 'csibm869': 'cp869', + 'csiso2022jp': 'iso2022_jp', + 'csiso2022jp2': 'iso2022_jp_2', + 'csiso2022kr': 'iso2022_kr', + 'csiso58gb231280': 'gbk', + 'csisolatin1': 'windows-1252', + 'csisolatin2': 'iso8859-2', + 'csisolatin3': 'iso8859-3', + 'csisolatin4': 'iso8859-4', + 'csisolatin5': 'windows-1254', + 'csisolatin6': 'iso8859-10', + 'csisolatinarabic': 'iso8859-6', + 'csisolatincyrillic': 'iso8859-5', + 'csisolatingreek': 'iso8859-7', + 'csisolatinhebrew': 'iso8859-8', + 'cskoi8r': 'koi8-r', + 'csksc56011987': 'cp949', + 'cspc775baltic': 'cp775', + 'cspc850multilingual': 'cp850', + 'cspc862latinhebrew': 'cp862', + 'cspc8codepage437': 'cp437', + 'cspcp852': 'cp852', + 'csptcp154': 'ptcp154', + 'csshiftjis': 'shift_jis', + 'csunicode11utf7': 'utf-7', + 'cyrillic': 'iso8859-5', + 'cyrillicasian': 'ptcp154', + 'ebcdiccpbe': 'cp500', + 'ebcdiccpca': 'cp037', + 'ebcdiccpch': 'cp500', + 'ebcdiccphe': 'cp424', + 'ebcdiccpnl': 'cp037', + 'ebcdiccpus': 'cp037', + 'ebcdiccpwt': 'cp037', + 'ecma114': 'iso8859-6', + 'ecma118': 'iso8859-7', + 'elot928': 'iso8859-7', + 'eucjp': 'euc_jp', + 'euckr': 'cp949', + 'extendedunixcodepackedformatforjapanese': 'euc_jp', + 'gb18030': 'gb18030', + 'gb2312': 'gbk', + 'gb231280': 'gbk', + 'gbk': 'gbk', + 'greek': 'iso8859-7', + 'greek8': 'iso8859-7', + 'hebrew': 'iso8859-8', + 'hproman8': 'hp-roman8', + 'hzgb2312': 'hz', + 'ibm037': 'cp037', + 'ibm1026': 'cp1026', + 'ibm367': 'ascii', + 'ibm424': 'cp424', + 'ibm437': 'cp437', + 'ibm500': 'cp500', + 'ibm775': 'cp775', + 'ibm819': 'windows-1252', + 'ibm850': 'cp850', + 'ibm852': 'cp852', + 'ibm855': 'cp855', + 'ibm857': 'cp857', + 'ibm860': 'cp860', + 'ibm861': 'cp861', + 'ibm862': 'cp862', + 'ibm863': 'cp863', + 'ibm864': 'cp864', + 'ibm865': 'cp865', + 'ibm866': 'cp866', + 'ibm869': 'cp869', + 'iso2022jp': 'iso2022_jp', + 'iso2022jp2': 'iso2022_jp_2', + 'iso2022kr': 'iso2022_kr', + 'iso646irv1991': 'ascii', + 'iso646us': 'ascii', + 'iso88591': 'windows-1252', + 'iso885910': 'iso8859-10', + 'iso8859101992': 'iso8859-10', + 'iso885911987': 'windows-1252', + 'iso885913': 'iso8859-13', + 'iso885914': 'iso8859-14', + 'iso8859141998': 'iso8859-14', + 'iso885915': 'iso8859-15', + 'iso885916': 'iso8859-16', + 'iso8859162001': 'iso8859-16', + 'iso88592': 'iso8859-2', + 'iso885921987': 'iso8859-2', + 'iso88593': 'iso8859-3', + 'iso885931988': 'iso8859-3', + 'iso88594': 'iso8859-4', + 'iso885941988': 'iso8859-4', + 'iso88595': 'iso8859-5', + 'iso885951988': 'iso8859-5', + 'iso88596': 'iso8859-6', + 'iso885961987': 'iso8859-6', + 'iso88597': 'iso8859-7', + 'iso885971987': 'iso8859-7', + 'iso88598': 'iso8859-8', + 'iso885981988': 'iso8859-8', + 'iso88599': 'windows-1254', + 'iso885991989': 'windows-1254', + 'isoceltic': 'iso8859-14', + 'isoir100': 'windows-1252', + 'isoir101': 'iso8859-2', + 'isoir109': 'iso8859-3', + 'isoir110': 'iso8859-4', + 'isoir126': 'iso8859-7', + 'isoir127': 'iso8859-6', + 'isoir138': 'iso8859-8', + 'isoir144': 'iso8859-5', + 'isoir148': 'windows-1254', + 'isoir149': 'cp949', + 'isoir157': 'iso8859-10', + 'isoir199': 'iso8859-14', + 'isoir226': 'iso8859-16', + 'isoir58': 'gbk', + 'isoir6': 'ascii', + 'koi8r': 'koi8-r', + 'koi8u': 'koi8-u', + 'korean': 'cp949', + 'ksc5601': 'cp949', + 'ksc56011987': 'cp949', + 'ksc56011989': 'cp949', + 'l1': 'windows-1252', + 'l10': 'iso8859-16', + 'l2': 'iso8859-2', + 'l3': 'iso8859-3', + 'l4': 'iso8859-4', + 'l5': 'windows-1254', + 'l6': 'iso8859-10', + 'l8': 'iso8859-14', + 'latin1': 'windows-1252', + 'latin10': 'iso8859-16', + 'latin2': 'iso8859-2', + 'latin3': 'iso8859-3', + 'latin4': 'iso8859-4', + 'latin5': 'windows-1254', + 'latin6': 'iso8859-10', + 'latin8': 'iso8859-14', + 'latin9': 'iso8859-15', + 'ms936': 'gbk', + 'mskanji': 'shift_jis', + 'pt154': 'ptcp154', + 'ptcp154': 'ptcp154', + 'r8': 'hp-roman8', + 'roman8': 'hp-roman8', + 'shiftjis': 'shift_jis', + 'tis620': 'cp874', + 'unicode11utf7': 'utf-7', + 'us': 'ascii', + 'usascii': 'ascii', + 'utf16': 'utf-16', + 'utf16be': 'utf-16-be', + 'utf16le': 'utf-16-le', + 'utf8': 'utf-8', + 'windows1250': 'cp1250', + 'windows1251': 'cp1251', + 'windows1252': 'cp1252', + 'windows1253': 'cp1253', + 'windows1254': 'cp1254', + 'windows1255': 'cp1255', + 'windows1256': 'cp1256', + 'windows1257': 'cp1257', + 'windows1258': 'cp1258', + 'windows936': 'gbk', + 'x-x-big5': 'big5'} + +tokenTypes = { + "Doctype": 0, + "Characters": 1, + "SpaceCharacters": 2, + "StartTag": 3, + "EndTag": 4, + "EmptyTag": 5, + "Comment": 6, + "ParseError": 7 +} + +tagTokenTypes = frozenset([tokenTypes["StartTag"], tokenTypes["EndTag"], + tokenTypes["EmptyTag"]]) + + +prefixes = dict([(v, k) for k, v in namespaces.items()]) +prefixes["http://www.w3.org/1998/Math/MathML"] = "math" + + +class DataLossWarning(UserWarning): + pass + + +class ReparseException(Exception): + pass diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__init__.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/_base.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/_base.py new file mode 100644 index 0000000..c7dbaed --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/_base.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import, division, unicode_literals + + +class Filter(object): + def __init__(self, source): + self.source = source + + def __iter__(self): + return iter(self.source) + + def __getattr__(self, name): + return getattr(self.source, name) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py new file mode 100644 index 0000000..fed6996 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py @@ -0,0 +1,20 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import _base + +try: + from collections import OrderedDict +except ImportError: + from ordereddict import OrderedDict + + +class Filter(_base.Filter): + def __iter__(self): + for token in _base.Filter.__iter__(self): + if token["type"] in ("StartTag", "EmptyTag"): + attrs = OrderedDict() + for name, value in sorted(token["data"].items(), + key=lambda x: x[0]): + attrs[name] = value + token["data"] = attrs + yield token diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py new file mode 100644 index 0000000..ca33b70 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py @@ -0,0 +1,65 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import _base + + +class Filter(_base.Filter): + def __init__(self, source, encoding): + _base.Filter.__init__(self, source) + self.encoding = encoding + + def __iter__(self): + state = "pre_head" + meta_found = (self.encoding is None) + pending = [] + + for token in _base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag": + if token["name"].lower() == "head": + state = "in_head" + + elif type == "EmptyTag": + if token["name"].lower() == "meta": + # replace charset with actual encoding + has_http_equiv_content_type = False + for (namespace, name), value in token["data"].items(): + if namespace is not None: + continue + elif name.lower() == 'charset': + token["data"][(namespace, name)] = self.encoding + meta_found = True + break + elif name == 'http-equiv' and value.lower() == 'content-type': + has_http_equiv_content_type = True + else: + if has_http_equiv_content_type and (None, "content") in token["data"]: + token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding + meta_found = True + + elif token["name"].lower() == "head" and not meta_found: + # insert meta into empty head + yield {"type": "StartTag", "name": "head", + "data": token["data"]} + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + yield {"type": "EndTag", "name": "head"} + meta_found = True + continue + + elif type == "EndTag": + if token["name"].lower() == "head" and pending: + # insert meta into head (if necessary) and flush pending queue + yield pending.pop(0) + if not meta_found: + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + while pending: + yield pending.pop(0) + meta_found = True + state = "post_head" + + if state == "in_head": + pending.append(token) + else: + yield token diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/lint.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/lint.py new file mode 100644 index 0000000..8884696 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/lint.py @@ -0,0 +1,90 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import _base +from ..constants import cdataElements, rcdataElements, voidElements + +from ..constants import spaceCharacters +spaceCharacters = "".join(spaceCharacters) + + +class LintError(Exception): + pass + + +class Filter(_base.Filter): + def __iter__(self): + open_elements = [] + contentModelFlag = "PCDATA" + for token in _base.Filter.__iter__(self): + type = token["type"] + if type in ("StartTag", "EmptyTag"): + name = token["name"] + if contentModelFlag != "PCDATA": + raise LintError("StartTag not in PCDATA content model flag: %(tag)s" % {"tag": name}) + if not isinstance(name, str): + raise LintError("Tag name is not a string: %(tag)r" % {"tag": name}) + if not name: + raise LintError("Empty tag name") + if type == "StartTag" and name in voidElements: + raise LintError("Void element reported as StartTag token: %(tag)s" % {"tag": name}) + elif type == "EmptyTag" and name not in voidElements: + raise LintError("Non-void element reported as EmptyTag token: %(tag)s" % {"tag": token["name"]}) + if type == "StartTag": + open_elements.append(name) + for name, value in token["data"]: + if not isinstance(name, str): + raise LintError("Attribute name is not a string: %(name)r" % {"name": name}) + if not name: + raise LintError("Empty attribute name") + if not isinstance(value, str): + raise LintError("Attribute value is not a string: %(value)r" % {"value": value}) + if name in cdataElements: + contentModelFlag = "CDATA" + elif name in rcdataElements: + contentModelFlag = "RCDATA" + elif name == "plaintext": + contentModelFlag = "PLAINTEXT" + + elif type == "EndTag": + name = token["name"] + if not isinstance(name, str): + raise LintError("Tag name is not a string: %(tag)r" % {"tag": name}) + if not name: + raise LintError("Empty tag name") + if name in voidElements: + raise LintError("Void element reported as EndTag token: %(tag)s" % {"tag": name}) + start_name = open_elements.pop() + if start_name != name: + raise LintError("EndTag (%(end)s) does not match StartTag (%(start)s)" % {"end": name, "start": start_name}) + contentModelFlag = "PCDATA" + + elif type == "Comment": + if contentModelFlag != "PCDATA": + raise LintError("Comment not in PCDATA content model flag") + + elif type in ("Characters", "SpaceCharacters"): + data = token["data"] + if not isinstance(data, str): + raise LintError("Attribute name is not a string: %(name)r" % {"name": data}) + if not data: + raise LintError("%(type)s token with empty data" % {"type": type}) + if type == "SpaceCharacters": + data = data.strip(spaceCharacters) + if data: + raise LintError("Non-space character(s) found in SpaceCharacters token: %(token)r" % {"token": data}) + + elif type == "Doctype": + name = token["name"] + if contentModelFlag != "PCDATA": + raise LintError("Doctype not in PCDATA content model flag: %(name)s" % {"name": name}) + if not isinstance(name, str): + raise LintError("Tag name is not a string: %(tag)r" % {"tag": name}) + # XXX: what to do with token["data"] ? + + elif type in ("ParseError", "SerializeError"): + pass + + else: + raise LintError("Unknown token type: %(type)s" % {"type": type}) + + yield token diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/optionaltags.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/optionaltags.py new file mode 100644 index 0000000..fefe0b3 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/optionaltags.py @@ -0,0 +1,205 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import _base + + +class Filter(_base.Filter): + def slider(self): + previous1 = previous2 = None + for token in self.source: + if previous1 is not None: + yield previous2, previous1, token + previous2 = previous1 + previous1 = token + yield previous2, previous1, None + + def __iter__(self): + for previous, token, next in self.slider(): + type = token["type"] + if type == "StartTag": + if (token["data"] or + not self.is_optional_start(token["name"], previous, next)): + yield token + elif type == "EndTag": + if not self.is_optional_end(token["name"], next): + yield token + else: + yield token + + def is_optional_start(self, tagname, previous, next): + type = next and next["type"] or None + if tagname in 'html': + # An html element's start tag may be omitted if the first thing + # inside the html element is not a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname == 'head': + # A head element's start tag may be omitted if the first thing + # inside the head element is an element. + # XXX: we also omit the start tag if the head element is empty + if type in ("StartTag", "EmptyTag"): + return True + elif type == "EndTag": + return next["name"] == "head" + elif tagname == 'body': + # A body element's start tag may be omitted if the first thing + # inside the body element is not a space character or a comment, + # except if the first thing inside the body element is a script + # or style element and the node immediately preceding the body + # element is a head element whose end tag has been omitted. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we do not look at the preceding event, so we never omit + # the body element's start tag if it's followed by a script or + # a style element. + return next["name"] not in ('script', 'style') + else: + return True + elif tagname == 'colgroup': + # A colgroup element's start tag may be omitted if the first thing + # inside the colgroup element is a col element, and if the element + # is not immediately preceeded by another colgroup element whose + # end tag has been omitted. + if type in ("StartTag", "EmptyTag"): + # XXX: we do not look at the preceding event, so instead we never + # omit the colgroup element's end tag when it is immediately + # followed by another colgroup element. See is_optional_end. + return next["name"] == "col" + else: + return False + elif tagname == 'tbody': + # A tbody element's start tag may be omitted if the first thing + # inside the tbody element is a tr element, and if the element is + # not immediately preceeded by a tbody, thead, or tfoot element + # whose end tag has been omitted. + if type == "StartTag": + # omit the thead and tfoot elements' end tag when they are + # immediately followed by a tbody element. See is_optional_end. + if previous and previous['type'] == 'EndTag' and \ + previous['name'] in ('tbody', 'thead', 'tfoot'): + return False + return next["name"] == 'tr' + else: + return False + return False + + def is_optional_end(self, tagname, next): + type = next and next["type"] or None + if tagname in ('html', 'head', 'body'): + # An html element's end tag may be omitted if the html element + # is not immediately followed by a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname in ('li', 'optgroup', 'tr'): + # A li element's end tag may be omitted if the li element is + # immediately followed by another li element or if there is + # no more content in the parent element. + # An optgroup element's end tag may be omitted if the optgroup + # element is immediately followed by another optgroup element, + # or if there is no more content in the parent element. + # A tr element's end tag may be omitted if the tr element is + # immediately followed by another tr element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] == tagname + else: + return type == "EndTag" or type is None + elif tagname in ('dt', 'dd'): + # A dt element's end tag may be omitted if the dt element is + # immediately followed by another dt element or a dd element. + # A dd element's end tag may be omitted if the dd element is + # immediately followed by another dd element or a dt element, + # or if there is no more content in the parent element. + if type == "StartTag": + return next["name"] in ('dt', 'dd') + elif tagname == 'dd': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'p': + # A p element's end tag may be omitted if the p element is + # immediately followed by an address, article, aside, + # blockquote, datagrid, dialog, dir, div, dl, fieldset, + # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, + # nav, ol, p, pre, section, table, or ul, element, or if + # there is no more content in the parent element. + if type in ("StartTag", "EmptyTag"): + return next["name"] in ('address', 'article', 'aside', + 'blockquote', 'datagrid', 'dialog', + 'dir', 'div', 'dl', 'fieldset', 'footer', + 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'header', 'hr', 'menu', 'nav', 'ol', + 'p', 'pre', 'section', 'table', 'ul') + else: + return type == "EndTag" or type is None + elif tagname == 'option': + # An option element's end tag may be omitted if the option + # element is immediately followed by another option element, + # or if it is immediately followed by an optgroup + # element, or if there is no more content in the parent + # element. + if type == "StartTag": + return next["name"] in ('option', 'optgroup') + else: + return type == "EndTag" or type is None + elif tagname in ('rt', 'rp'): + # An rt element's end tag may be omitted if the rt element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + # An rp element's end tag may be omitted if the rp element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('rt', 'rp') + else: + return type == "EndTag" or type is None + elif tagname == 'colgroup': + # A colgroup element's end tag may be omitted if the colgroup + # element is not immediately followed by a space character or + # a comment. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we also look for an immediately following colgroup + # element. See is_optional_start. + return next["name"] != 'colgroup' + else: + return True + elif tagname in ('thead', 'tbody'): + # A thead element's end tag may be omitted if the thead element + # is immediately followed by a tbody or tfoot element. + # A tbody element's end tag may be omitted if the tbody element + # is immediately followed by a tbody or tfoot element, or if + # there is no more content in the parent element. + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] in ['tbody', 'tfoot'] + elif tagname == 'tbody': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'tfoot': + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] == 'tbody' + else: + return type == "EndTag" or type is None + elif tagname in ('td', 'th'): + # A td element's end tag may be omitted if the td element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + # A th element's end tag may be omitted if the th element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('td', 'th') + else: + return type == "EndTag" or type is None + return False diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/sanitizer.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/sanitizer.py new file mode 100644 index 0000000..b206b54 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/sanitizer.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import _base +from ..sanitizer import HTMLSanitizerMixin + + +class Filter(_base.Filter, HTMLSanitizerMixin): + def __iter__(self): + for token in _base.Filter.__iter__(self): + token = self.sanitize_token(token) + if token: + yield token diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/whitespace.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/whitespace.py new file mode 100644 index 0000000..dfc60ee --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/whitespace.py @@ -0,0 +1,38 @@ +from __future__ import absolute_import, division, unicode_literals + +import re + +from . import _base +from ..constants import rcdataElements, spaceCharacters +spaceCharacters = "".join(spaceCharacters) + +SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) + + +class Filter(_base.Filter): + + spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) + + def __iter__(self): + preserve = 0 + for token in _base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag" \ + and (preserve or token["name"] in self.spacePreserveElements): + preserve += 1 + + elif type == "EndTag" and preserve: + preserve -= 1 + + elif not preserve and type == "SpaceCharacters" and token["data"]: + # Test on token["data"] above to not introduce spaces where there were not + token["data"] = " " + + elif not preserve and type == "Characters": + token["data"] = collapse_spaces(token["data"]) + + yield token + + +def collapse_spaces(text): + return SPACES_REGEX.sub(' ', text) diff --git a/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/html5parser.py b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/html5parser.py new file mode 100644 index 0000000..40f3d09 --- /dev/null +++ b/armarium_app/arm_env/lib/python3.5/site-packages/pip/_vendor/html5lib/html5parser.py @@ -0,0 +1,2724 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import with_metaclass + +import types + +from . import inputstream +from . import tokenizer + +from . import treebuilders +from .treebuilders._base import Marker + +from . import utils +from . import constants +from .constants import spaceCharacters, asciiUpper2Lower +from .constants import specialElements +from .constants import headingElements +from .constants import cdataElements, rcdataElements +from .constants import tokenTypes, ReparseException, namespaces +from .constants import htmlIntegrationPointElements, mathmlTextIntegrationPointElements +from .constants import adjustForeignAttributes as adjustForeignAttributesMap +from .constants import E + + +def parse(doc, treebuilder="etree", encoding=None, + namespaceHTMLElements=True): + """Parse a string or file-like object into a tree""" + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parse(doc, encoding=encoding) + + +def parseFragment(doc, container="div", treebuilder="etree", encoding=None, + namespaceHTMLElements=True): + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parseFragment(doc, container=container, encoding=encoding) + + +def method_decorator_metaclass(function): + class Decorated(type): + def __new__(meta, classname, bases, classDict): + for attributeName, attribute in classDict.items(): + if isinstance(attribute, types.FunctionType): + attribute = function(attribute) + + classDict[attributeName] = attribute + return type.__new__(meta, classname, bases, classDict) + return Decorated + + +class HTMLParser(object): + """HTML parser. Generates a tree structure from a stream of (possibly + malformed) HTML""" + + def __init__(self, tree=None, tokenizer=tokenizer.HTMLTokenizer, + strict=False, namespaceHTMLElements=True, debug=False): + """ + strict - raise an exception when a parse error is encountered + + tree - a treebuilder class controlling the type of tree that will be + returned. Built in treebuilders can be accessed through + html5lib.treebuilders.getTreeBuilder(treeType) + + tokenizer - a class that provides a stream of tokens to the treebuilder. + This may be replaced for e.g. a sanitizer which converts some tags to + text + """ + + # Raise an exception on the first error encountered + self.strict = strict + + if tree is None: + tree = treebuilders.getTreeBuilder("etree") + self.tree = tree(namespaceHTMLElements) + self.tokenizer_class = tokenizer + self.errors = [] + + self.phases = dict([(name, cls(self, self.tree)) for name, cls in + getPhases(debug).items()]) + + def _parse(self, stream, innerHTML=False, container="div", + encoding=None, parseMeta=True, useChardet=True, **kwargs): + + self.innerHTMLMode = innerHTML + self.container = container + self.tokenizer = self.tokenizer_class(stream, encoding=encoding, + parseMeta=parseMeta, + useChardet=useChardet, + parser=self, **kwargs) + self.reset() + + while True: + try: + self.mainLoop() + break + except ReparseException: + self.reset() + + def reset(self): + self.tree.reset() + self.firstStartTag = False + self.errors = [] + self.log = [] # only used with debug mode + # "quirks" / "limited quirks" / "no quirks" + self.compatMode = "no quirks" + + if self.innerHTMLMode: + self.innerHTML = self.container.lower() + + if self.innerHTML in cdataElements: + self.tokenizer.state = self.tokenizer.rcdataState + elif self.innerHTML in rcdataElements: + self.tokenizer.state = self.tokenizer.rawtextState + elif self.innerHTML == 'plaintext': + self.tokenizer.state = self.tokenizer.plaintextState + else: + # state already is data state + # self.tokenizer.state = self.tokenizer.dataState + pass + self.phase = self.phases["beforeHtml"] + self.phase.insertHtmlElement() + self.resetInsertionMode() + else: + self.innerHTML = False + self.phase = self.phases["initial"] + + self.lastPhase = None + + self.beforeRCDataPhase = None + + self.framesetOK = True + + @property + def documentEncoding(self): + """The name of the character encoding + that was used to decode the input stream, + or :obj:`None` if that is not determined yet. + + """ + if not hasattr(self, 'tokenizer'): + return None + return self.tokenizer.stream.charEncoding[0] + + def isHTMLIntegrationPoint(self, element): + if (element.name == "annotation-xml" and + element.namespace == namespaces["mathml"]): + return ("encoding" in element.attributes and + element.attributes["encoding"].translate( + asciiUpper2Lower) in + ("text/html", "application/xhtml+xml")) + else: + return (element.namespace, element.name) in htmlIntegrationPointElements + + def isMathMLTextIntegrationPoint(self, element): + return (element.namespace, element.name) in mathmlTextIntegrationPointElements + + def mainLoop(self): + CharactersToken = tokenTypes["Characters"] + SpaceCharactersToken = tokenTypes["SpaceCharacters"] + StartTagToken = tokenTypes["StartTag"] + EndTagToken = tokenTypes["EndTag"] + CommentToken = tokenTypes["Comment"] + DoctypeToken = tokenTypes["Doctype"] + ParseErrorToken = tokenTypes["ParseError"] + + for token in self.normalizedTokens(): + new_token = token + while new_token is not None: + currentNode = self.tree.openElements[-1] if self.tree.openElements else None + currentNodeNamespace = currentNode.namespace if currentNode else None + currentNodeName = currentNode.name if currentNode else None + + type = new_token["type"] + + if type == ParseErrorToken: + self.parseError(new_token["data"], new_token.get("datavars", {})) + new_token = None + else: + if (len(self.tree.openElements) == 0 or + currentNodeNamespace == self.tree.defaultNamespace or + (self.isMathMLTextIntegrationPoint(currentNode) and + ((type == StartTagToken and + token["name"] not in frozenset(["mglyph", "malignmark"])) or + type in (CharactersToken, SpaceCharactersToken))) or + (currentNodeNamespace == namespaces["mathml"] and + currentNodeName == "annotation-xml" and + token["name"] == "svg") or + (self.isHTMLIntegrationPoint(currentNode) and + type in (StartTagToken, CharactersToken, SpaceCharactersToken))): + phase = self.phase + else: + phase = self.phases["inForeignContent"] + + if type == CharactersToken: + new_token = phase.processCharacters(new_token) + elif type == SpaceCharactersToken: + new_token = phase.processSpaceCharacters(new_token) + elif type == StartTagToken: + new_token = phase.processStartTag(new_token) + elif type == EndTagToken: + new_token = phase.processEndTag(new_token) + elif type == CommentToken: + new_token = phase.processComment(new_token) + elif type == DoctypeToken: + new_token = phase.processDoctype(new_token) + + if (type == StartTagToken and token["selfClosing"] + and not token["selfClosingAcknowledged"]): + self.parseError("non-void-element-with-trailing-solidus", + {"name": token["name"]}) + + # When the loop finishes it's EOF + reprocess = True + phases = [] + while reprocess: + phases.append(self.phase) + reprocess = self.phase.processEOF() + if reprocess: + assert self.phase not in phases + + def normalizedTokens(self): + for token in self.tokenizer: + yield self.normalizeToken(token) + + def parse(self, stream, encoding=None, parseMeta=True, useChardet=True): + """Parse a HTML document into a well-formed tree + + stream - a filelike object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + """ + self._parse(stream, innerHTML=False, encoding=encoding, + parseMeta=parseMeta, useChardet=useChardet) + return self.tree.getDocument() + + def parseFragment(self, stream, container="div", encoding=None, + parseMeta=False, useChardet=True): + """Parse a HTML fragment into a well-formed tree fragment + + container - name of the element we're setting the innerHTML property + if set to None, default to 'div' + + stream - a filelike object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + """ + self._parse(stream, True, container=container, encoding=encoding) + return self.tree.getFragment() + + def parseError(self, errorcode="XXX-undefined-error", datavars={}): + # XXX The idea is to make errorcode mandatory. + self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) + if self.strict: + raise ParseError(E[errorcode] % datavars) + + def normalizeToken(self, token): + """ HTML5 specific normalizations to the token stream """ + + if token["type"] == tokenTypes["StartTag"]: + token["data"] = dict(token["data"][::-1]) + + return token + + def adjustMathMLAttributes(self, token): + replacements = {"definitionurl": "definitionURL"} + for k, v in replacements.items(): + if k in token["data"]: + token["data"][v] = token["data"][k] + del token["data"][k] + + def adjustSVGAttributes(self, token): + replacements = { + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "contentscripttype": "contentScriptType", + "contentstyletype": "contentStyleType", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "externalresourcesrequired": "externalResourcesRequired", + "filterres": "filterRes", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan" + } + for originalName in list(token["data"].keys()): + if originalName in replacements: + svgName = replacements[originalName] + token["data"][svgName] = token["data"][originalName] + del token["data"][originalName] + + def adjustForeignAttributes(self, token): + replacements = adjustForeignAttributesMap + + for originalName in token["data"].keys(): + if originalName in replacements: + foreignName = replacements[originalName] + token["data"][foreignName] = token["data"][originalName] + del token["data"][originalName] + + def reparseTokenNormal(self, token): + self.parser.phase() + + def resetInsertionMode(self): + # The name of this method is mostly historical. (It's also used in the + # specification.) + last = False + newModes = { + "select": "inSelect", + "td": "inCell", + "th": "inCell", + "tr": "inRow", + "tbody": "inTableBody", + "thead": "inTableBody", + "tfoot": "inTableBody", + "caption": "inCaption", + "colgroup": "inColumnGroup", + "table": "inTable", + "head": "inBody", + "body": "inBody", + "frameset": "inFrameset", + "html": "beforeHead" + } + for node in self.tree.openElements[::-1]: + nodeName = node.name + new_phase = None + if node == self.tree.openElements[0]: + assert self.innerHTML + last = True + nodeName = self.innerHTML + # Check for conditions that should only happen in the innerHTML + # case + if nodeName in ("select", "colgroup", "head", "html"): + assert self.innerHTML + + if not last and node.namespace != self.tree.defaultNamespace: + continue + + if nodeName in newModes: + new_phase = self.phases[newModes[nodeName]] + break + elif last: + new_phase = self.phases["inBody"] + break + + self.phase = new_phase + + def parseRCDataRawtext(self, token, contentType): + """Generic RCDATA/RAWTEXT Parsing algorithm + contentType - RCDATA or RAWTEXT + """ + assert contentType in ("RAWTEXT", "RCDATA") + + self.tree.insertElement(token) + + if contentType == "RAWTEXT": + self.tokenizer.state = self.tokenizer.rawtextState + else: + self.tokenizer.state = self.tokenizer.rcdataState + + self.originalPhase = self.phase + + self.phase = self.phases["text"] + + +def getPhases(debug): + def log(function): + """Logger that records which phase processes each token""" + type_names = dict((value, key) for key, value in + constants.tokenTypes.items()) + + def wrapped(self, *args, **kwargs): + if function.__name__.startswith("process") and len(args) > 0: + token = args[0] + try: + info = {"type": type_names[token['type']]} + except: + raise + if token['type'] in constants.tagTokenTypes: + info["name"] = token['name'] + + self.parser.log.append((self.parser.tokenizer.state.__name__, + self.parser.phase.__class__.__name__, + self.__class__.__name__, + function.__name__, + info)) + return function(self, *args, **kwargs) + else: + return function(self, *args, **kwargs) + return wrapped + + def getMetaclass(use_metaclass, metaclass_func): + if use_metaclass: + return method_decorator_metaclass(metaclass_func) + else: + return type + + class Phase(with_metaclass(getMetaclass(debug, log))): + """Base class for helper object that implements each phase of processing + """ + + def __init__(self, parser, tree): + self.parser = parser + self.tree = tree + + def processEOF(self): + raise NotImplementedError + + def processComment(self, token): + # For most phases the following is correct. Where it's not it will be + # overridden. + self.tree.insertComment(token, self.tree.openElements[-1]) + + def processDoctype(self, token): + self.parser.parseError("unexpected-doctype") + + def processCharacters(self, token): + self.tree.insertText(token["data"]) + + def processSpaceCharacters(self, token): + self.tree.insertText(token["data"]) + + def processStartTag(self, token): + return self.startTagHandler[token["name"]](token) + + def startTagHtml(self, token): + if not self.parser.firstStartTag and token["name"] == "html": + self.parser.parseError("non-html-root") + # XXX Need a check here to see if the first start tag token emitted is + # this token... If it's not, invoke self.parser.parseError(). + for attr, value in token["data"].items(): + if attr not in self.tree.openElements[0].attributes: + self.tree.openElements[0].attributes[attr] = value + self.parser.firstStartTag = False + + def processEndTag(self, token): + return self.endTagHandler[token["name"]](token) + + class InitialPhase(Phase): + def processSpaceCharacters(self, token): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + correct = token["correct"] + + if (name != "html" or publicId is not None or + systemId is not None and systemId != "about:legacy-compat"): + self.parser.parseError("unknown-doctype") + + if publicId is None: + publicId = "" + + self.tree.insertDoctype(token) + + if publicId != "": + publicId = publicId.translate(asciiUpper2Lower) + + if (not correct or token["name"] != "html" + or publicId.startswith( + ("+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//")) + or publicId in + ("-//w3o//dtd w3 html strict 3.0//en//", + "-/w3c/dtd html 4.0 transitional/en", + "html") + or publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is None + or systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): + self.parser.compatMode = "quirks" + elif (publicId.startswith( + ("-//w3c//dtd xhtml 1.0 frameset//", + "-//w3c//dtd xhtml 1.0 transitional//")) + or publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is not None): + self.parser.compatMode = "limited quirks" + + self.parser.phase = self.parser.phases["beforeHtml"] + + def anythingElse(self): + self.parser.compatMode = "quirks" + self.parser.phase = self.parser.phases["beforeHtml"] + + def processCharacters(self, token): + self.parser.parseError("expected-doctype-but-got-chars") + self.anythingElse() + return token + + def processStartTag(self, token): + self.parser.parseError("expected-doctype-but-got-start-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEndTag(self, token): + self.parser.parseError("expected-doctype-but-got-end-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEOF(self): + self.parser.parseError("expected-doctype-but-got-eof") + self.anythingElse() + return True + + class BeforeHtmlPhase(Phase): + # helper methods + def insertHtmlElement(self): + self.tree.insertRoot(impliedTagToken("html", "StartTag")) + self.parser.phase = self.parser.phases["beforeHead"] + + # other + def processEOF(self): + self.insertHtmlElement() + return True + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.insertHtmlElement() + return token + + def processStartTag(self, token): + if token["name"] == "html": + self.parser.firstStartTag = True + self.insertHtmlElement() + return token + + def processEndTag(self, token): + if token["name"] not in ("head", "body", "html", "br"): + self.parser.parseError("unexpected-end-tag-before-html", + {"name": token["name"]}) + else: + self.insertHtmlElement() + return token + + class BeforeHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = utils.MethodDispatcher([ + (("head", "body", "html", "br"), self.endTagImplyHead) + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.startTagHead(impliedTagToken("head", "StartTag")) + return True + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.tree.insertElement(token) + self.tree.headPointer = self.tree.openElements[-1] + self.parser.phase = self.parser.phases["inHead"] + + def startTagOther(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagImplyHead(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagOther(self, token): + self.parser.parseError("end-tag-after-implied-root", + {"name": token["name"]}) + + class InHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("title", self.startTagTitle), + (("noscript", "noframes", "style"), self.startTagNoScriptNoFramesStyle), + ("script", self.startTagScript), + (("base", "basefont", "bgsound", "command", "link"), + self.startTagBaseLinkCommand), + ("meta", self.startTagMeta), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + + self. endTagHandler = utils.MethodDispatcher([ + ("head", self.endTagHead), + (("br", "html", "body"), self.endTagHtmlBodyBr) + ]) + self.endTagHandler.default = self.endTagOther + + # the real thing + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.parser.parseError("two-heads-are-not-better-than-one") + + def startTagBaseLinkCommand(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagMeta(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + attributes = token["data"] + if self.parser.tokenizer.stream.charEncoding[1] == "tentative": + if "charset" in attributes: + self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) + elif ("content" in attributes and + "http-equiv" in attributes and + attributes["http-equiv"].lower() == "content-type"): + # Encoding it as UTF-8 here is a hack, as really we should pass + # the abstract Unicode string, and just use the + # ContentAttrParser on that, but using UTF-8 allows all chars + # to be encoded and as a ASCII-superset works. + data = inputstream.EncodingBytes(attributes["content"].encode("utf-8")) + parser = inputstream.ContentAttrParser(data) + codec = parser.parse() + self.parser.tokenizer.stream.changeEncoding(codec) + + def startTagTitle(self, token): + self.parser.parseRCDataRawtext(token, "RCDATA") + + def startTagNoScriptNoFramesStyle(self, token): + # Need to decide whether to implement the scripting-disabled case + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagScript(self, token): + self.tree.insertElement(token) + self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState + self.parser.originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["text"] + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHead(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "head", "Expected head got %s" % node.name + self.parser.phase = self.parser.phases["afterHead"] + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.endTagHead(impliedTagToken("head")) + + # XXX If we implement a parser for which scripting is disabled we need to + # implement this phase. + # + # class InHeadNoScriptPhase(Phase): + class AfterHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("body", self.startTagBody), + ("frameset", self.startTagFrameset), + (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", + "style", "title"), + self.startTagFromHead), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + self.endTagHandler = utils.MethodDispatcher([(("body", "html", "br"), + self.endTagHtmlBodyBr)]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBody(self, token): + self.parser.framesetOK = False + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inBody"] + + def startTagFrameset(self, token): + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inFrameset"] + + def startTagFromHead(self, token): + self.parser.parseError("unexpected-start-tag-out-of-my-head", + {"name": token["name"]}) + self.tree.openElements.append(self.tree.headPointer) + self.parser.phases["inHead"].processStartTag(token) + for node in self.tree.openElements[::-1]: + if node.name == "head": + self.tree.openElements.remove(node) + break + + def startTagHead(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.tree.insertElement(impliedTagToken("body", "StartTag")) + self.parser.phase = self.parser.phases["inBody"] + self.parser.framesetOK = True + + class InBodyPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody + # the really-really-really-very crazy mode + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + # Keep a ref to this for special handling of whitespace in
+            self.processSpaceCharactersNonPre = self.processSpaceCharacters
+
+            self.startTagHandler = utils.MethodDispatcher([
+                ("html", self.startTagHtml),
+                (("base", "basefont", "bgsound", "command", "link", "meta",
+                  "script", "style", "title"),
+                 self.startTagProcessInHead),
+                ("body", self.startTagBody),
+                ("frameset", self.startTagFrameset),
+                (("address", "article", "aside", "blockquote", "center", "details",
+                  "details", "dir", "div", "dl", "fieldset", "figcaption", "figure",
+                  "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p",
+                  "section", "summary", "ul"),
+                 self.startTagCloseP),
+                (headingElements, self.startTagHeading),
+                (("pre", "listing"), self.startTagPreListing),
+                ("form", self.startTagForm),
+                (("li", "dd", "dt"), self.startTagListItem),
+                ("plaintext", self.startTagPlaintext),
+                ("a", self.startTagA),
+                (("b", "big", "code", "em", "font", "i", "s", "small", "strike",
+                  "strong", "tt", "u"), self.startTagFormatting),
+                ("nobr", self.startTagNobr),
+                ("button", self.startTagButton),
+                (("applet", "marquee", "object"), self.startTagAppletMarqueeObject),
+                ("xmp", self.startTagXmp),
+                ("table", self.startTagTable),
+                (("area", "br", "embed", "img", "keygen", "wbr"),
+                 self.startTagVoidFormatting),
+                (("param", "source", "track"), self.startTagParamSource),
+                ("input", self.startTagInput),
+                ("hr", self.startTagHr),
+                ("image", self.startTagImage),
+                ("isindex", self.startTagIsIndex),
+                ("textarea", self.startTagTextarea),
+                ("iframe", self.startTagIFrame),
+                (("noembed", "noframes", "noscript"), self.startTagRawtext),
+                ("select", self.startTagSelect),
+                (("rp", "rt"), self.startTagRpRt),
+                (("option", "optgroup"), self.startTagOpt),
+                (("math"), self.startTagMath),
+                (("svg"), self.startTagSvg),
+                (("caption", "col", "colgroup", "frame", "head",
+                  "tbody", "td", "tfoot", "th", "thead",
+                  "tr"), self.startTagMisplaced)
+            ])
+            self.startTagHandler.default = self.startTagOther
+
+            self.endTagHandler = utils.MethodDispatcher([
+                ("body", self.endTagBody),
+                ("html", self.endTagHtml),
+                (("address", "article", "aside", "blockquote", "button", "center",
+                  "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure",
+                  "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre",
+                  "section", "summary", "ul"), self.endTagBlock),
+                ("form", self.endTagForm),
+                ("p", self.endTagP),
+                (("dd", "dt", "li"), self.endTagListItem),
+                (headingElements, self.endTagHeading),
+                (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small",
+                  "strike", "strong", "tt", "u"), self.endTagFormatting),
+                (("applet", "marquee", "object"), self.endTagAppletMarqueeObject),
+                ("br", self.endTagBr),
+            ])
+            self.endTagHandler.default = self.endTagOther
+
+        def isMatchingFormattingElement(self, node1, node2):
+            if node1.name != node2.name or node1.namespace != node2.namespace:
+                return False
+            elif len(node1.attributes) != len(node2.attributes):
+                return False
+            else:
+                attributes1 = sorted(node1.attributes.items())
+                attributes2 = sorted(node2.attributes.items())
+                for attr1, attr2 in zip(attributes1, attributes2):
+                    if attr1 != attr2:
+                        return False
+            return True
+
+        # helper
+        def addFormattingElement(self, token):
+            self.tree.insertElement(token)
+            element = self.tree.openElements[-1]
+
+            matchingElements = []
+            for node in self.tree.activeFormattingElements[::-1]:
+                if node is Marker:
+                    break
+                elif self.isMatchingFormattingElement(node, element):
+                    matchingElements.append(node)
+
+            assert len(matchingElements) <= 3
+            if len(matchingElements) == 3:
+                self.tree.activeFormattingElements.remove(matchingElements[-1])
+            self.tree.activeFormattingElements.append(element)
+
+        # the real deal
+        def processEOF(self):
+            allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td",
+                                          "tfoot", "th", "thead", "tr", "body",
+                                          "html"))
+            for node in self.tree.openElements[::-1]:
+                if node.name not in allowed_elements:
+                    self.parser.parseError("expected-closing-tag-but-got-eof")
+                    break
+            # Stop parsing
+
+        def processSpaceCharactersDropNewline(self, token):
+            # Sometimes (start of 
, , and ",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("