123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732 |
- (defconst ps-print-version "7.3.5"
- "ps-print.el, v 7.3.5 <2009/12/23 vinicius>
- Vinicius's last change version -- this file may have been edited as part of
- Emacs without changes to the version number. When reporting bugs, please also
- report the version of Emacs, if any, that ps-print was distributed with.
- Please send all bug fixes and enhancements to
- Vinicius Jose Latorre <viniciusjl@ig.com.br>.")
- (require 'lpr)
- (if (featurep 'xemacs)
- (or (featurep 'lisp-float-type)
- (error "`ps-print' requires floating point support"))
- (unless (and (boundp 'emacs-major-version)
- (>= emacs-major-version 23))
- (error "`ps-print' only supports Emacs 23 and higher")))
- (defconst ps-windows-system
- (memq system-type '(ms-dos windows-nt)))
- (defconst ps-lp-system
- (memq system-type '(usg-unix-v hpux irix)))
- (require 'ps-def)
- (defgroup postscript nil
- "Support for printing and PostScript."
- :tag "PostScript"
- :version "20"
- :group 'external)
- (defgroup ps-print nil
- "PostScript generator for Emacs."
- :link '(emacs-library-link :tag "Source Lisp File" "ps-print.el")
- :prefix "ps-"
- :version "20"
- :group 'wp
- :group 'postscript)
- (defgroup ps-print-horizontal nil
- "Horizontal page layout."
- :prefix "ps-"
- :tag "Horizontal"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-vertical nil
- "Vertical page layout."
- :prefix "ps-"
- :tag "Vertical"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-headers nil
- "Headers & footers layout."
- :prefix "ps-"
- :tag "Header & Footer"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-font nil
- "Fonts customization."
- :prefix "ps-"
- :tag "Font"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-color nil
- "Color customization."
- :prefix "ps-"
- :tag "Color"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-face nil
- "Faces customization."
- :prefix "ps-"
- :tag "PS Faces"
- :version "20"
- :group 'ps-print
- :group 'faces)
- (defgroup ps-print-n-up nil
- "N-up customization."
- :prefix "ps-"
- :tag "N-Up"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-zebra nil
- "Zebra customization."
- :prefix "ps-"
- :tag "Zebra"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-background nil
- "Background customization."
- :prefix "ps-"
- :tag "Background"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-printer '((lpr custom-group))
- "Printer customization."
- :prefix "ps-"
- :tag "Printer"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-page nil
- "Page customization."
- :prefix "ps-"
- :tag "Page"
- :version "20"
- :group 'ps-print)
- (defgroup ps-print-miscellany nil
- "Miscellany customization."
- :prefix "ps-"
- :tag "Miscellany"
- :version "20"
- :group 'ps-print)
- (defcustom ps-error-handler-message 'paper
- "Specify where the error handler message should be sent.
- Valid values are:
- `none' catch the error and *DON'T* send any message.
- `paper' catch the error and print on paper the error message.
- `system' catch the error and send back the error message to
- printing system. This is useful only if printing system
- send back an email reporting the error, or if there is
- some other alternative way to report back the error from
- the system to you.
- `paper-and-system' catch the error, print on paper the error message and
- send back the error message to printing system.
- Any other value is treated as `paper'."
- :type '(choice :menu-tag "Error Handler Message"
- :tag "Error Handler Message"
- (const none) (const paper)
- (const system) (const paper-and-system))
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-user-defined-prologue nil
- "User defined PostScript prologue code inserted before all prologue code.
- `ps-user-defined-prologue' may be a string or a symbol function which returns a
- string. Note that this string is inserted after `ps-adobe-tag' and PostScript
- prologue comments, and before ps-print PostScript prologue code section. That
- is, this string is inserted after error handler initialization and before
- ps-print settings.
- It's strongly recommended only insert PostScript code and/or comments specific
- for your printing system particularities. For example, some special
- initialization that only your printing system needs.
- Do not insert code for duplex printing, n-up printing or error handler,
- ps-print handles this in a suitable way.
- For more information about PostScript, see:
- PostScript Language Reference Manual (2nd edition)
- Adobe Systems Incorporated
- As an example for `ps-user-defined-prologue' setting:
- ;; Setting for HP PostScript printer
- (setq ps-user-defined-prologue
- (concat \"<</DeferredMediaSelection true /PageSize [612 792] \"
- \"/MediaPosition 2 /MediaType (Plain)>> setpagedevice\"))"
- :type '(choice :menu-tag "User Defined Prologue"
- :tag "User Defined Prologue"
- (const :tag "none" nil) string symbol)
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-print-prologue-header nil
- "PostScript prologue header comments besides that ps-print generates.
- `ps-print-prologue-header' may be a string or a symbol function which returns a
- string. Note that this string is inserted on PostScript prologue header
- section which is used to define some document characteristic through PostScript
- special comments, like \"%%Requirements: jog\\n\".
- ps-print always inserts the %%Requirements: comment, so if you need to insert
- more requirements put them first in `ps-print-prologue-header' using the
- \"%%+\" comment. For example, if you need to set numcopies to 3 and jog on
- requirements and set %%LanguageLevel: to 2, do:
- (setq ps-print-prologue-header
- \"%%+ numcopies(3) jog\\n%%LanguageLevel: 2\\n\")
- The duplex requirement is inserted by ps-print (see `ps-spool-duplex').
- Do not forget to terminate the string with \"\\n\".
- For more information about PostScript document comments, see:
- PostScript Language Reference Manual (2nd edition)
- Adobe Systems Incorporated
- Appendix G: Document Structuring Conventions -- Version 3.0"
- :type '(choice :menu-tag "Prologue Header"
- :tag "Prologue Header"
- (const :tag "none" nil) string symbol)
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-printer-name (and (boundp 'printer-name)
- (symbol-value 'printer-name))
- "The name of a local printer for printing PostScript files.
- On Unix-like systems, a string value should be a name understood by lpr's -P
- option; a value of nil means use the value of `printer-name' instead.
- On MS-DOS and MS-Windows systems, a string value is taken as the name of the
- printer device or port to which PostScript files are written, provided
- `ps-lpr-command' is \"\". By default it is the same as `printer-name'; typical
- non-default settings would be \"LPT1\" to \"LPT3\" for parallel printers, or
- \"COM1\" to \"COM4\" or \"AUX\" for serial printers, or \"\\\\hostname\\printer\"
- for a shared network printer. You can also set it to a name of a file, in
- which case the output gets appended to that file. \(Note that `ps-print'
- package already has facilities for printing to a file, so you might as well use
- them instead of changing the setting of this variable.\) If you want to
- silently discard the printed output, set this to \"NUL\".
- Set to t, if the utility given by `ps-lpr-command' needs an empty printer name.
- Any other value is treated as t, that is, an empty printer name.
- See also `ps-printer-name-option' for documentation."
- :type '(choice :menu-tag "Printer Name"
- :tag "Printer Name"
- (const :tag "Same as printer-name" nil)
- (const :tag "No Printer Name" t)
- (file :tag "Print to file")
- (string :tag "Pipe to ps-lpr-command"))
- :version "20"
- :group 'ps-print-printer)
- (defcustom ps-printer-name-option
- (cond (ps-windows-system
- "/D:")
- (ps-lp-system
- "-d")
- (t
- "-P" ))
- "Option for `ps-printer-name' variable (see it).
- On Unix-like systems, if `lpr' is in use, this should be the string
- \"-P\"; if `lp' is in use, this should be the string \"-d\".
- On MS-DOS and MS-Windows systems, if `print' is in use, this should be
- the string \"/D:\".
- For any other printing utility, see its documentation.
- Set this to \"\" or nil, if the utility given by `ps-lpr-command'
- needs an empty printer name option--that is, pass the printer name
- with no special option preceding it.
- Any value that is not a string is treated as nil.
- This variable is used only when `ps-printer-name' is a non-empty string."
- :type '(choice :menu-tag "Printer Name Option"
- :tag "Printer Name Option"
- (const :tag "None" nil)
- (string :tag "Option"))
- :version "21.1"
- :group 'ps-print-printer)
- (defcustom ps-lpr-command lpr-command
- "Name of program for printing a PostScript file.
- On MS-DOS and MS-Windows systems, if the value is an empty string then Emacs
- will write directly to the printer port named by `ps-printer-name'. The
- programs `print' and `nprint' (the standard print programs on Windows NT and
- Novell Netware respectively) are handled specially, using `ps-printer-name' as
- the destination for output; any other program is treated like `lpr' except that
- an explicit filename is given as the last argument."
- :type 'string
- :version "20"
- :group 'ps-print-printer)
- (defcustom ps-lpr-switches lpr-switches
- "List of extra switches to pass to `ps-lpr-command'.
- The list element can be:
- string it should be an option for `ps-lpr-command' (which see).
- For example: \"-o Duplex=DuplexNoTumble\"
- symbol it can be a function or variable symbol. If it's a function
- symbol, it should be a function with no argument. The result
- of the function or the variable value should be a string or a
- list of strings.
- list the header should be a symbol function and the tail is the
- arguments for this function. This function should return a
- string or a list of strings.
- Any other value is silently ignored.
- It is recommended to set `ps-printer-name' (which see) instead of including an
- explicit switch on this list.
- See `ps-lpr-command'."
- :type '(repeat :tag "PostScript lpr Switches"
- (choice :menu-tag "PostScript lpr Switch"
- :tag "PostScript lpr Switch"
- string symbol (repeat sexp)))
- :version "20"
- :group 'ps-print-printer)
- (defcustom ps-print-region-function nil
- "Specify a function to print the region on a PostScript printer.
- See definition of `call-process-region' for calling conventions. The fourth
- and the sixth arguments are both nil."
- :type '(choice (const nil) function)
- :version "20"
- :group 'ps-print-printer)
- (defcustom ps-manual-feed nil
- "Non-nil means the printer will manually feed paper.
- If it's nil, automatic feeding takes place."
- :type 'boolean
- :version "20"
- :group 'ps-print-printer)
- (defcustom ps-end-with-control-d (and ps-windows-system t)
- "Non-nil means insert C-d at end of PostScript file generated."
- :version "21.1"
- :type 'boolean
- :version "20"
- :group 'ps-print-printer)
- (defcustom ps-page-dimensions-database
- (purecopy
- (list (list 'a4 (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4")
- (list 'a3 (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3")
- (list 'letter (* 72 8.5) (* 72 11.0) "Letter")
- (list 'legal (* 72 8.5) (* 72 14.0) "Legal")
- (list 'letter-small (* 72 7.68) (* 72 10.16) "LetterSmall")
- (list 'tabloid (* 72 11.0) (* 72 17.0) "Tabloid")
- (list 'ledger (* 72 17.0) (* 72 11.0) "Ledger")
- (list 'statement (* 72 5.5) (* 72 8.5) "Statement")
- (list 'executive (* 72 7.5) (* 72 10.0) "Executive")
- (list 'a4small (* 72 7.47) (* 72 10.85) "A4Small")
- (list 'b4 (* 72 10.125) (* 72 14.33) "B4")
- (list 'b5 (* 72 7.16) (* 72 10.125) "B5")
-
-
- '(addresslarge 236.0 99.0 "AddressLarge")
- '(addresssmall 236.0 68.0 "AddressSmall")
- '(cuthanging13 90.0 222.0 "CutHanging13")
- '(cuthanging15 90.0 114.0 "CutHanging15")
- '(diskette 181.0 136.0 "Diskette")
- '(eurofilefolder 139.0 112.0 "EuropeanFilefolder")
- '(eurofoldernarrow 526.0 107.0 "EuroFolderNarrow")
- '(eurofolderwide 526.0 136.0 "EuroFolderWide")
- '(euronamebadge 189.0 108.0 "EuroNameBadge")
- '(euronamebadgelarge 223.0 136.0 "EuroNameBadgeLarge")
- '(filefolder 230.0 37.0 "FileFolder")
- '(jewelry 76.0 136.0 "Jewelry")
- '(mediabadge 180.0 136.0 "MediaBadge")
- '(multipurpose 126.0 68.0 "MultiPurpose")
- '(retaillabel 90.0 104.0 "RetailLabel")
- '(shipping 271.0 136.0 "Shipping")
- '(slide35mm 26.0 104.0 "Slide35mm")
- '(spine8mm 187.0 26.0 "Spine8mm")
- '(topcoated 425.19685 136.0 "TopCoatedPaper")
- '(topcoatedpaper 396.0 136.0 "TopcoatedPaper150")
- '(vhsface 205.0 127.0 "VHSFace")
- '(vhsspine 400.0 50.0 "VHSSpine")
- '(zipdisk 156.0 136.0 "ZipDisk")))
- "List associating a symbolic paper type to its width, height and doc media.
- See `ps-paper-type'."
- :type '(repeat (list :tag "Paper Type"
- (symbol :tag "Symbol Name")
- (number :tag "Width in points")
- (number :tag "Height in points")
- (string :tag "Media")))
- :version "20"
- :group 'ps-print-page)
- (defcustom ps-paper-type 'letter
- "Specify the size of paper to format for.
- Should be one of the paper types defined in `ps-page-dimensions-database', for
- example `letter', `legal' or `a4'."
- :type '(symbol :validate (lambda (wid)
- (if (assq (widget-value wid)
- ps-page-dimensions-database)
- nil
- (widget-put wid :error "Unknown paper size")
- wid)))
- :version "20"
- :group 'ps-print-page)
- (defcustom ps-warn-paper-type t
- "Non-nil means give an error if paper size is not equal to `ps-paper-type'.
- It's used when `ps-spool-config' is set to `setpagedevice'."
- :type 'boolean
- :version "20"
- :group 'ps-print-page)
- (defcustom ps-landscape-mode nil
- "Non-nil means print in landscape mode."
- :type 'boolean
- :version "20"
- :group 'ps-print-page)
- (defcustom ps-print-upside-down nil
- "Non-nil means print upside-down (that is, rotated by 180 degrees)."
- :type 'boolean
- :version "21.1"
- :group 'ps-print-page)
- (defcustom ps-selected-pages nil
- "Specify which pages to print.
- If nil, print all pages.
- If a list, the lists element may be an integer or a cons cell (FROM . TO)
- designating FROM page to TO page; any invalid element is ignored, that is, an
- integer lesser than one or if FROM is greater than TO.
- Otherwise, it's treated as nil.
- After ps-print processing `ps-selected-pages' is set to nil. But the
- latest `ps-selected-pages' is saved in `ps-last-selected-pages' (which
- see). So you can restore the latest selected pages by using
- `ps-last-selected-pages' or with the `ps-restore-selected-pages'
- command (which see).
- See also `ps-even-or-odd-pages'."
- :type '(repeat :tag "Selected Pages"
- (radio :tag "Page"
- (integer :tag "Number")
- (cons :tag "Range"
- (integer :tag "From")
- (integer :tag "To"))))
- :version "20"
- :group 'ps-print-page)
- (defcustom ps-even-or-odd-pages nil
- "Specify if it prints even/odd pages.
- Valid values are:
- nil print all pages.
- `even-page' print only even pages.
- `odd-page' print only odd pages.
- `even-sheet' print only even sheets.
- That is, if `ps-n-up-printing' is 1, it behaves as `even-page';
- but for values greater than 1, it'll print only the even sheet
- of paper.
- `odd-sheet' print only odd sheets.
- That is, if `ps-n-up-printing' is 1, it behaves as `odd-page';
- but for values greater than 1, it'll print only the odd sheet
- of paper.
- Any other value is treated as nil.
- If you set `ps-selected-pages' (see it for documentation), first the pages are
- filtered by `ps-selected-pages' and then by `ps-even-or-odd-pages'. For
- example, if we have:
- (setq ps-selected-pages '(1 4 (6 . 10) (12 . 16) 20))
- Combining with `ps-even-or-odd-pages' and `ps-n-up-printing', we have:
- `ps-n-up-printing' = 1:
- `ps-even-or-odd-pages' PAGES PRINTED
- nil 1, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 20
- even-page 4, 6, 8, 10, 12, 14, 16, 20
- odd-page 1, 7, 9, 13, 15
- even-sheet 4, 6, 8, 10, 12, 14, 16, 20
- odd-sheet 1, 7, 9, 13, 15
- `ps-n-up-printing' = 2:
- `ps-even-or-odd-pages' PAGES PRINTED
- nil 1/4, 6/7, 8/9, 10/12, 13/14, 15/16, 20
- even-page 4/6, 8/10, 12/14, 16/20
- odd-page 1/7, 9/13, 15
- even-sheet 6/7, 10/12, 15/16
- odd-sheet 1/4, 8/9, 13/14, 20
- So even-page/odd-page are about page parity and even-sheet/odd-sheet are about
- sheet parity."
- :type '(choice :menu-tag "Print Even/Odd Pages"
- :tag "Print Even/Odd Pages"
- (const :tag "All Pages" nil)
- (const :tag "Only Even Pages" even-page)
- (const :tag "Only Odd Pages" odd-page)
- (const :tag "Only Even Sheets" even-sheet)
- (const :tag "Only Odd Sheets" odd-sheet))
- :version "20"
- :group 'ps-print-page)
- (defcustom ps-print-control-characters 'control-8-bit
- "Specify the printable form for control and 8-bit characters.
- That is, instead of sending, for example, a ^D (\\004) to printer,
- it is sent the string \"^D\".
- Valid values are:
- `8-bit' This is the value to use when you want an ASCII encoding of
- any control or non-ASCII character. Control characters are
- encoded as \"^D\", and non-ASCII characters have an
- octal encoding.
- `control-8-bit' This is the value to use when you want an ASCII encoding of
- any control character, whether it is 7 or 8-bit.
- European 8-bits accented characters are printed according
- the current font.
- `control' Only ASCII control characters have an ASCII encoding.
- European 8-bits accented characters are printed according
- the current font.
- nil No ASCII encoding. Any character is printed according the
- current font.
- Any other value is treated as nil."
- :type '(choice :menu-tag "Control Char"
- :tag "Control Char"
- (const 8-bit) (const control-8-bit)
- (const control) (const :tag "nil" nil))
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-n-up-printing 1
- "Specify the number of pages per sheet paper."
- :type '(integer
- :tag "N Up Printing"
- :validate
- (lambda (wid)
- (if (and (< 0 (widget-value wid))
- (<= (widget-value wid) 100))
- nil
- (widget-put
- wid :error
- "Number of pages per sheet paper must be between 1 and 100.")
- wid)))
- :version "20"
- :group 'ps-print-n-up)
- (defcustom ps-n-up-margin (/ (* 72 1.0) 2.54)
- "Specify the margin in points between the sheet border and n-up printing."
- :type 'number
- :version "20"
- :group 'ps-print-n-up)
- (defcustom ps-n-up-border-p t
- "Non-nil means a border is drawn around each page."
- :type 'boolean
- :version "20"
- :group 'ps-print-n-up)
- (defcustom ps-n-up-filling 'left-top
- "Specify how page matrix is filled on each sheet of paper.
- Following are the valid values for `ps-n-up-filling' with a filling example
- using a 3x4 page matrix:
- `left-top' 1 2 3 4 `left-bottom' 9 10 11 12
- 5 6 7 8 5 6 7 8
- 9 10 11 12 1 2 3 4
- `right-top' 4 3 2 1 `right-bottom' 12 11 10 9
- 8 7 6 5 8 7 6 5
- 12 11 10 9 4 3 2 1
- `top-left' 1 4 7 10 `bottom-left' 3 6 9 12
- 2 5 8 11 2 5 8 11
- 3 6 9 12 1 4 7 10
- `top-right' 10 7 4 1 `bottom-right' 12 9 6 3
- 11 8 5 2 11 8 5 2
- 12 9 6 3 10 7 4 1
- Any other value is treated as `left-top'."
- :type '(choice :menu-tag "N-Up Filling"
- :tag "N-Up Filling"
- (const left-top) (const left-bottom)
- (const right-top) (const right-bottom)
- (const top-left) (const bottom-left)
- (const top-right) (const bottom-right))
- :version "20"
- :group 'ps-print-n-up)
- (defcustom ps-number-of-columns (if ps-landscape-mode 2 1)
- "Specify the number of columns."
- :type 'number
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-zebra-stripes nil
- "Non-nil means print zebra stripes.
- See also documentation for `ps-zebra-stripe-height' and `ps-zebra-color'."
- :type 'boolean
- :version "20"
- :group 'ps-print-zebra)
- (defcustom ps-zebra-stripe-height 3
- "Number of zebra stripe lines.
- See also documentation for `ps-zebra-stripes' and `ps-zebra-color'."
- :type 'number
- :version "20"
- :group 'ps-print-zebra)
- (defcustom ps-zebra-color 0.95
- "Zebra stripe gray scale or RGB color.
- See also documentation for `ps-zebra-stripes' and `ps-zebra-stripe-height'."
- :type '(choice :menu-tag "Zebra Gray/Color"
- :tag "Zebra Gray/Color"
- (number :tag "Gray Scale" :value 0.95)
- (string :tag "Color Name" :value "gray95")
- (list :tag "RGB Color" :value (0.95 0.95 0.95)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue")))
- :version "20"
- :group 'ps-print-zebra)
- (defcustom ps-zebra-stripe-follow nil
- "Specify how zebra stripes continue on next page.
- Visually, valid values are (the character `+' at right of each column indicates
- that a line is printed):
- `nil' `follow' `full' `full-follow'
- Current Page -------- ----------- --------- ----------------
- 1 XXXXX + 1 XXXXXXXX + 1 XXXXXX + 1 XXXXXXXXXXXXX +
- 2 XXXXX + 2 XXXXXXXX + 2 XXXXXX + 2 XXXXXXXXXXXXX +
- 3 XXXXX + 3 XXXXXXXX + 3 XXXXXX + 3 XXXXXXXXXXXXX +
- 4 + 4 + 4 + 4 +
- 5 + 5 + 5 + 5 +
- 6 + 6 + 6 + 6 +
- 7 XXXXX + 7 XXXXXXXX + 7 XXXXXX + 7 XXXXXXXXXXXXX +
- 8 XXXXX + 8 XXXXXXXX + 8 XXXXXX + 8 XXXXXXXXXXXXX +
- 9 XXXXX + 9 XXXXXXXX + 9 XXXXXX + 9 XXXXXXXXXXXXX +
- 10 + 10 +
- 11 + 11 +
- -------- ----------- --------- ----------------
- Next Page -------- ----------- --------- ----------------
- 12 XXXXX + 12 + 10 XXXXXX + 10 +
- 13 XXXXX + 13 XXXXXXXX + 11 XXXXXX + 11 +
- 14 XXXXX + 14 XXXXXXXX + 12 XXXXXX + 12 +
- 15 + 15 XXXXXXXX + 13 + 13 XXXXXXXXXXXXX +
- 16 + 16 + 14 + 14 XXXXXXXXXXXXX +
- 17 + 17 + 15 + 15 XXXXXXXXXXXXX +
- 18 XXXXX + 18 + 16 XXXXXX + 16 +
- 19 XXXXX + 19 XXXXXXXX + 17 XXXXXX + 17 +
- 20 XXXXX + 20 XXXXXXXX + 18 XXXXXX + 18 +
- 21 + 21 XXXXXXXX +
- 22 + 22 +
- -------- ----------- --------- ----------------
- Any other value is treated as nil."
- :type '(choice :menu-tag "Zebra Stripe Follow"
- :tag "Zebra Stripe Follow"
- (const :tag "Always Restart" nil)
- (const :tag "Continue on Next Page" follow)
- (const :tag "Print Only Full Stripe" full)
- (const :tag "Continue on Full Stripe" full-follow))
- :version "20"
- :group 'ps-print-zebra)
- (defcustom ps-line-number nil
- "Non-nil means print line number."
- :type 'boolean
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-line-number-step 1
- "Specify the interval that line number is printed.
- For example, `ps-line-number-step' is set to 2, the printing will look like:
- 1 one line
- one line
- 3 one line
- one line
- 5 one line
- one line
- ...
- Valid values are:
- integer an integer that specifies the interval that line number is
- printed. If it's lesser than or equal to zero, it's used the
- value 1.
- `zebra' specifies that only the line number of the first line in a
- zebra stripe is to be printed.
- Any other value is treated as `zebra'."
- :type '(choice :menu-tag "Line Number Step"
- :tag "Line Number Step"
- (integer :tag "Step Interval")
- (const :tag "Synchronize Zebra" zebra))
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-line-number-start 1
- "Specify the starting point in the interval given by `ps-line-number-step'.
- For example, if `ps-line-number-step' is set to 3 and `ps-line-number-start' is
- set to 3, the printing will look like:
- one line
- one line
- 3 one line
- one line
- one line
- 6 one line
- one line
- one line
- 9 one line
- one line
- ...
- The values for `ps-line-number-start':
- * If `ps-line-number-step' is an integer, must be between 1 and the value of
- `ps-line-number-step' inclusive.
- * If `ps-line-number-step' is set to `zebra', must be between 1 and the
- value of `ps-zebra-strip-height' inclusive. Use this combination if you
- wish that line number be relative to zebra stripes."
- :type '(integer :tag "Start Step Interval")
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-print-background-image nil
- "EPS image list to be printed on background.
- The elements are:
- (FILENAME X Y XSCALE YSCALE ROTATION PAGES...)
- FILENAME is a file name which contains an EPS image or some PostScript
- programming like EPS.
- FILENAME is ignored, if it doesn't exist or is read protected.
- X and Y are relative positions on paper to put the image.
- If X and Y are nil, the image is centered on paper.
- XSCALE and YSCALE are scale factor to be applied to image before printing.
- If XSCALE and YSCALE are nil, the original size is used.
- ROTATION is the image rotation angle; if nil, the default is 0.
- PAGES designates the page to print background image.
- PAGES may be a number or a cons cell (FROM . TO) designating FROM page to TO
- page.
- If PAGES is nil, print background image on all pages.
- X, Y, XSCALE, YSCALE and ROTATION may be a floating point number, an integer
- number or a string. If it is a string, the string should contain PostScript
- programming that returns a float or integer value.
- For example, if you wish to print an EPS image on all pages do:
- '((\"~/images/EPS-image.ps\"))"
- :type '(repeat
- (list
- (file :tag "EPS File")
- (choice :tag "X" (const :tag "default" nil) number string)
- (choice :tag "Y" (const :tag "default" nil) number string)
- (choice :tag "X Scale" (const :tag "default" nil) number string)
- (choice :tag "Y Scale" (const :tag "default" nil) number string)
- (choice :tag "Rotation" (const :tag "default" nil) number string)
- (repeat :tag "Pages" :inline t
- (radio (integer :tag "Page")
- (cons :tag "Range"
- (integer :tag "From")
- (integer :tag "To"))))))
- :version "20"
- :group 'ps-print-background)
- (defcustom ps-print-background-text nil
- "Text list to be printed on background.
- The elements are:
- (STRING X Y FONT FONTSIZE GRAY ROTATION PAGES...)
- STRING is the text to be printed on background.
- X and Y are positions on paper to put the text.
- If X and Y are nil, the text is positioned at lower left corner.
- FONT is a font name to be used on printing the text.
- If nil, \"Times-Roman\" is used.
- FONTSIZE is font size to be used, if nil, 200 is used.
- GRAY is the text gray factor (should be very light like 0.8).
- If nil, the default is 0.85.
- ROTATION is the text rotation angle; if nil, the angle is given by the diagonal
- from lower left corner to upper right corner.
- PAGES designates the page to print background text.
- PAGES may be a number or a cons cell (FROM . TO) designating FROM page to TO
- page.
- If PAGES is nil, print background text on all pages.
- X, Y, FONTSIZE, GRAY and ROTATION may be a floating point number, an integer
- number or a string. If it is a string, the string should contain PostScript
- programming that returns a float or integer value.
- For example, if you wish to print text \"Preliminary\" on all pages do:
- '((\"Preliminary\"))"
- :type '(repeat
- (list
- (string :tag "Text")
- (choice :tag "X" (const :tag "default" nil) number string)
- (choice :tag "Y" (const :tag "default" nil) number string)
- (choice :tag "Font" (const :tag "default" nil) string)
- (choice :tag "Fontsize" (const :tag "default" nil) number string)
- (choice :tag "Gray" (const :tag "default" nil) number string)
- (choice :tag "Rotation" (const :tag "default" nil) number string)
- (repeat :tag "Pages" :inline t
- (radio (integer :tag "Page")
- (cons :tag "Range"
- (integer :tag "From")
- (integer :tag "To"))))))
- :version "20"
- :group 'ps-print-background)
- (defcustom ps-left-margin (/ (* 72 2.0) 2.54)
- "Left margin in points (1/72 inch)."
- :type 'number
- :version "20"
- :group 'ps-print-horizontal)
- (defcustom ps-right-margin (/ (* 72 2.0) 2.54)
- "Right margin in points (1/72 inch)."
- :type 'number
- :version "20"
- :group 'ps-print-horizontal)
- (defcustom ps-inter-column (/ (* 72 2.0) 2.54)
- "Horizontal space between columns in points (1/72 inch)."
- :type 'number
- :version "20"
- :group 'ps-print-horizontal)
- (defcustom ps-bottom-margin (/ (* 72 1.5) 2.54)
- "Bottom margin in points (1/72 inch)."
- :type 'number
- :version "20"
- :group 'ps-print-vertical)
- (defcustom ps-top-margin (/ (* 72 1.5) 2.54)
- "Top margin in points (1/72 inch)."
- :type 'number
- :version "20"
- :group 'ps-print-vertical)
- (defcustom ps-header-offset (/ (* 72 1.0) 2.54)
- "Vertical space in points (1/72 inch) between the main text and the header."
- :type 'number
- :version "20"
- :group 'ps-print-vertical)
- (defcustom ps-header-line-pad 0.15
- "Portion of a header title line height to insert.
- The insertion is done between the header frame and the text it contains,
- both in the vertical and horizontal directions."
- :type 'number
- :version "20"
- :group 'ps-print-vertical)
- (defcustom ps-footer-offset (/ (* 72 1.0) 2.54)
- "Vertical space in points (1/72 inch) between the main text and the footer."
- :type 'number
- :version "20"
- :group 'ps-print-vertical)
- (defcustom ps-footer-line-pad 0.15
- "Portion of a footer title line height to insert.
- The insertion is done between the footer frame and the text it contains,
- both in the vertical and horizontal directions."
- :type 'number
- :version "20"
- :group 'ps-print-vertical)
- (defcustom ps-print-header t
- "Non-nil means print a header at the top of each page.
- By default, the header displays the buffer name, page number, and, if the
- buffer is visiting a file, the file's directory. Headers are customizable by
- changing variables `ps-left-header' and `ps-right-header'."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-print-header-frame t
- "Non-nil means draw a gaudy frame around the header."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-header-frame-alist
- '((fore-color . 0.0)
- (back-color . 0.9)
- (border-width . 0.4)
- (border-color . 0.0)
- (shadow-color . 0.0))
- "Specify header frame properties alist.
- Valid frame properties are:
- `fore-color' Specify the foreground frame color.
- It should be a float number between 0.0 (black color)
- and 1.0 (white color), a string which is a color name,
- or a list of 3 float numbers which corresponds to the
- Red Green Blue color scale, each float number between
- 0.0 (dark color) and 1.0 (bright color).
- `back-color' Specify the background frame color (similar to
- `fore-color').
- `shadow-color' Specify the shadow color (similar to `fore-color').
- `border-color' Specify the border color (similar to `fore-color').
- `border-width' Specify the border width.
- Any other property is ignored.
- Don't change this alist directly, instead use customization, or `ps-value',
- `ps-get', `ps-put' and `ps-del' functions (see them for documentation)."
- :version "21.1"
- :type '(repeat
- (choice :menu-tag "Header Frame Element"
- :tag ""
- (cons :tag "Foreground Color" :format "%v"
- (const :format "" fore-color)
- (choice :menu-tag "Foreground Color"
- :tag "Foreground Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- (cons :tag "Background Color" :format "%v"
- (const :format "" back-color)
- (choice :menu-tag "Background Color"
- :tag "Background Color"
- (number :tag "Gray Scale" :value 0.9)
- (string :tag "Color Name" :value "gray90")
- (list :tag "RGB Color" :value (0.9 0.9 0.9)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- (cons :tag "Border Width" :format "%v"
- (const :format "" border-width)
- (number :tag "Border Width" :value 0.4))
- (cons :tag "Border Color" :format "%v"
- (const :format "" border-color)
- (choice :menu-tag "Border Color"
- :tag "Border Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- (cons :tag "Shadow Color" :format "%v"
- (const :format "" shadow-color)
- (choice :menu-tag "Shadow Color"
- :tag "Shadow Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))))
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-header-lines 2
- "Number of lines to display in page header, when generating PostScript."
- :type 'integer
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-print-footer nil
- "Non-nil means print a footer at the bottom of each page.
- By default, the footer displays page number.
- Footers are customizable by changing variables `ps-left-footer' and
- `ps-right-footer'."
- :type 'boolean
- :version "21.1"
- :group 'ps-print-headers)
- (defcustom ps-print-footer-frame t
- "Non-nil means draw a gaudy frame around the footer."
- :type 'boolean
- :version "21.1"
- :group 'ps-print-headers)
- (defcustom ps-footer-frame-alist
- '((fore-color . 0.0)
- (back-color . 0.9)
- (border-width . 0.4)
- (border-color . 0.0)
- (shadow-color . 0.0))
- "Specify footer frame properties alist.
- Don't change this alist directly, instead use customization, or `ps-value',
- `ps-get', `ps-put' and `ps-del' functions (see them for documentation).
- See also `ps-header-frame-alist' for documentation."
- :type '(repeat
- (choice :menu-tag "Header Frame Element"
- :tag ""
- (cons :tag "Foreground Color" :format "%v"
- (const :format "" fore-color)
- (choice :menu-tag "Foreground Color"
- :tag "Foreground Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- (cons :tag "Background Color" :format "%v"
- (const :format "" back-color)
- (choice :menu-tag "Background Color"
- :tag "Background Color"
- (number :tag "Gray Scale" :value 0.9)
- (string :tag "Color Name" :value "gray90")
- (list :tag "RGB Color" :value (0.9 0.9 0.9)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- (cons :tag "Border Width" :format "%v"
- (const :format "" border-width)
- (number :tag "Border Width" :value 0.4))
- (cons :tag "Border Color" :format "%v"
- (const :format "" border-color)
- (choice :menu-tag "Border Color"
- :tag "Border Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- (cons :tag "Shadow Color" :format "%v"
- (const :format "" shadow-color)
- (choice :menu-tag "Shadow Color"
- :tag "Shadow Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))))
- :version "21.1"
- :group 'ps-print-headers)
- (defcustom ps-footer-lines 2
- "Number of lines to display in page footer, when generating PostScript."
- :type 'integer
- :version "21.1"
- :group 'ps-print-headers)
- (defcustom ps-print-only-one-header nil
- "Non-nil means print only one header/footer at the top/bottom of each page.
- This is useful when printing more than one column, so it is possible to have
- only one header/footer over all columns or one header/footer per column.
- See also `ps-print-header' and `ps-print-footer'."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-switch-header 'duplex
- "Specify if headers/footers are switched or not.
- Valid values are:
- nil Never switch headers/footers.
- t Always switch headers/footers.
- duplex Switch headers/footers only when duplexing is on, that is, when
- `ps-spool-duplex' is non-nil.
- Any other value is treated as t.
- See also `ps-print-header' and `ps-print-footer'."
- :type '(choice :menu-tag "Switch Header/Footer"
- :tag "Switch Header/Footer"
- (const :tag "Never Switch" nil)
- (const :tag "Always Switch" t)
- (const :tag "Switch When Duplexing" duplex))
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-show-n-of-n t
- "Non-nil means show page numbers as N/M, meaning page N of M.
- NOTE: page numbers are displayed as part of headers,
- see variable `ps-print-header'."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-spool-config
- (if ps-windows-system
- nil
- 'lpr-switches)
- "Specify who is responsible for setting duplex and page size.
- Valid values are:
- `lpr-switches' duplex and page size are configured by `ps-lpr-switches'.
- Don't forget to set `ps-lpr-switches' to select duplex
- printing for your printer.
- `setpagedevice' duplex and page size are configured by ps-print using the
- setpagedevice PostScript operator.
- nil duplex and page size are configured by ps-print *not* using
- the setpagedevice PostScript operator.
- Any other value is treated as nil.
- WARNING: The setpagedevice PostScript operator affects ghostview utility when
- viewing file generated using landscape. Also on some printers,
- setpagedevice affects zebra stripes; on other printers, setpagedevice
- affects the left margin.
- Besides all that, if your printer does not have the paper size
- specified by setpagedevice, your printing will be aborted.
- So, if you need to use setpagedevice, set `ps-spool-config' to
- `setpagedevice', generate a test file and send it to your printer; if
- the printed file isn't OK, set `ps-spool-config' to nil."
- :type '(choice :menu-tag "Spool Config"
- :tag "Spool Config"
- (const lpr-switches) (const setpagedevice)
- (const :tag "nil" nil))
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-spool-duplex nil
-
- "Non-nil generates PostScript for a two-sided printer.
- For a duplex printer, the `ps-spool-*' and `ps-print-*' commands will insert
- blank pages as needed between print jobs so that the next buffer printed will
- start on the right page. Also, if headers are turned on, the headers will be
- reversed on duplex printers so that the page numbers fall to the left on
- even-numbered pages.
- See also `ps-spool-tumble'."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-spool-tumble nil
- "Specify how the page images on opposite sides of a sheet are oriented.
- If `ps-spool-tumble' is nil, produces output suitable for binding on the left
- or right. If `ps-spool-tumble' is non-nil, produces output suitable for
- binding at the top or bottom.
- It has effect only when `ps-spool-duplex' is non-nil."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-font-info-database
- '((Courier
- (fonts (normal . "Courier")
- (bold . "Courier-Bold")
- (italic . "Courier-Oblique")
- (bold-italic . "Courier-BoldOblique"))
- (size . 10.0)
- (line-height . 10.55)
- (space-width . 6.0)
- (avg-char-width . 6.0))
- (Helvetica
- (fonts (normal . "Helvetica")
- (bold . "Helvetica-Bold")
- (italic . "Helvetica-Oblique")
- (bold-italic . "Helvetica-BoldOblique"))
- (size . 10.0)
- (line-height . 11.56)
- (space-width . 2.78)
- (avg-char-width . 5.09243))
- (Times
- (fonts (normal . "Times-Roman")
- (bold . "Times-Bold")
- (italic . "Times-Italic")
- (bold-italic . "Times-BoldItalic"))
- (size . 10.0)
- (line-height . 11.0)
- (space-width . 2.5)
- (avg-char-width . 4.71432))
- (Palatino
- (fonts (normal . "Palatino-Roman")
- (bold . "Palatino-Bold")
- (italic . "Palatino-Italic")
- (bold-italic . "Palatino-BoldItalic"))
- (size . 10.0)
- (line-height . 12.1)
- (space-width . 2.5)
- (avg-char-width . 5.08676))
- (Helvetica-Narrow
- (fonts (normal . "Helvetica-Narrow")
- (bold . "Helvetica-Narrow-Bold")
- (italic . "Helvetica-Narrow-Oblique")
- (bold-italic . "Helvetica-Narrow-BoldOblique"))
- (size . 10.0)
- (line-height . 11.56)
- (space-width . 2.2796)
- (avg-char-width . 4.17579))
- (NewCenturySchlbk
- (fonts (normal . "NewCenturySchlbk-Roman")
- (bold . "NewCenturySchlbk-Bold")
- (italic . "NewCenturySchlbk-Italic")
- (bold-italic . "NewCenturySchlbk-BoldItalic"))
- (size . 10.0)
- (line-height . 12.15)
- (space-width . 2.78)
- (avg-char-width . 5.31162))
-
- (AvantGarde-Book
- (fonts (normal . "AvantGarde-Book")
- (italic . "AvantGarde-BookOblique"))
- (size . 10.0)
- (line-height . 11.77)
- (space-width . 2.77)
- (avg-char-width . 5.45189))
- (AvantGarde-Demi
- (fonts (normal . "AvantGarde-Demi")
- (italic . "AvantGarde-DemiOblique"))
- (size . 10.0)
- (line-height . 12.72)
- (space-width . 2.8)
- (avg-char-width . 5.51351))
- (Bookman-Demi
- (fonts (normal . "Bookman-Demi")
- (italic . "Bookman-DemiItalic"))
- (size . 10.0)
- (line-height . 11.77)
- (space-width . 3.4)
- (avg-char-width . 6.05946))
- (Bookman-Light
- (fonts (normal . "Bookman-Light")
- (italic . "Bookman-LightItalic"))
- (size . 10.0)
- (line-height . 11.79)
- (space-width . 3.2)
- (avg-char-width . 5.67027))
-
- (Symbol
- (fonts (normal . "Symbol"))
- (size . 10.0)
- (line-height . 13.03)
- (space-width . 2.5)
- (avg-char-width . 3.24324))
- (Zapf-Dingbats
- (fonts (normal . "Zapf-Dingbats"))
- (size . 10.0)
- (line-height . 9.63)
- (space-width . 2.78)
- (avg-char-width . 2.78))
- (ZapfChancery-MediumItalic
- (fonts (normal . "ZapfChancery-MediumItalic"))
- (size . 10.0)
- (line-height . 11.45)
- (space-width . 2.2)
- (avg-char-width . 4.10811))
-
-
- (Zapf-Chancery-MediumItalic
- (fonts (normal . "ZapfChancery-MediumItalic"))
- (size . 10.0)
- (line-height . 11.45)
- (space-width . 2.2)
- (avg-char-width . 4.10811))
- )
- "Font info database.
- Each element comprises: font family (the key), name, bold, italic, bold-italic,
- reference size, line height, space width, average character width.
- To get the info for another specific font (say Helvetica), do the following:
- - create a new buffer
- - generate the PostScript image to a file (C-u M-x ps-print-buffer)
- - open this file and delete the leading `%' (which is the PostScript comment
- character) from the line
- `% 3 cm 20 cm moveto 10/Courier ReportFontInfo showpage'
- to get the line
- `3 cm 20 cm moveto 10/Helvetica ReportFontInfo showpage'
- - add the values to `ps-font-info-database'.
- You can get all the fonts of YOUR printer using `ReportAllFontInfo'.
- Note also that ps-print DOESN'T download any font to your printer, instead it
- uses the fonts resident in your printer."
- :type '(repeat
- (list :tag "Font Definition"
- (symbol :tag "Font Family")
- (cons :format "%v"
- (const :format "" fonts)
- (repeat :tag "Faces"
- (cons (choice :menu-tag "Font Weight/Slant"
- :tag "Font Weight/Slant"
- (const normal)
- (const bold)
- (const italic)
- (const bold-italic)
- (symbol :tag "Face"))
- (string :tag "Font Name"))))
- (cons :format "%v"
- (const :format "" size)
- (number :tag "Reference Size"))
- (cons :format "%v"
- (const :format "" line-height)
- (number :tag "Line Height"))
- (cons :format "%v"
- (const :format "" space-width)
- (number :tag "Space Width"))
- (cons :format "%v"
- (const :format "" avg-char-width)
- (number :tag "Average Character Width"))))
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-font-family 'Courier
- "Font family name for ordinary text, when generating PostScript."
- :type 'symbol
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-font-size '(7 . 8.5)
- "Font size, in points, for ordinary text, when generating PostScript.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE)."
- :type '(choice :menu-tag "Ordinary Text Font Size"
- :tag "Ordinary Text Font Size"
- (number :tag "Text Size")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Text Size")
- (number :tag "Portrait Text Size")))
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-header-font-family 'Helvetica
- "Font family name for text in the header, when generating PostScript."
- :type 'symbol
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-header-font-size '(10 . 12)
- "Font size, in points, for text in the header, when generating PostScript.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE)."
- :type '(choice :menu-tag "Header Font Size"
- :tag "Header Font Size"
- (number :tag "Header Size")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Header Size")
- (number :tag "Portrait Header Size")))
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-header-title-font-size '(12 . 14)
- "Font size, in points, for the top line of text in header, in PostScript.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE)."
- :type '(choice :menu-tag "Header Title Font Size"
- :tag "Header Title Font Size"
- (number :tag "Header Title Size")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Header Title Size")
- (number :tag "Portrait Header Title Size")))
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-footer-font-family 'Helvetica
- "Font family name for text in the footer, when generating PostScript."
- :type 'symbol
- :version "21.1"
- :group 'ps-print-font)
- (defcustom ps-footer-font-size '(10 . 12)
- "Font size, in points, for text in the footer, when generating PostScript.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE)."
- :type '(choice :menu-tag "Footer Font Size"
- :tag "Footer Font Size"
- (number :tag "Footer Size")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Footer Size")
- (number :tag "Portrait Footer Size")))
- :version "21.1"
- :group 'ps-print-font)
- (defcustom ps-line-number-color "black"
- "Specify color for line-number, when generating PostScript."
- :type '(choice :menu-tag "Line Number Color"
- :tag "Line Number Color"
- (number :tag "Gray Scale" :value 0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0 0 0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue")))
- :version "21.1"
- :group 'ps-print-font
- :group 'ps-print-miscellany)
- (defcustom ps-line-number-font "Times-Italic"
- "Font for line-number, when generating PostScript."
- :type 'string
- :version "20"
- :group 'ps-print-font
- :group 'ps-print-miscellany)
- (defcustom ps-line-number-font-size 6
- "Font size, in points, for line number, when generating PostScript.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE)."
- :type '(choice :menu-tag "Line Number Font Size"
- :tag "Line Number Font Size"
- (number :tag "Font Size")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Font Size")
- (number :tag "Portrait Font Size")))
- :version "20"
- :group 'ps-print-font
- :group 'ps-print-miscellany)
- (defcustom ps-print-color-p
- (or (fboundp 'x-color-values)
- (fboundp 'color-instance-rgb-components))
-
- "Specify how buffer's text color is printed.
- Valid values are:
- nil Do not print colors.
- t Print colors.
- black-white Print colors on black/white printer.
- See also `ps-black-white-faces'.
- Any other value is treated as t."
- :type '(choice :menu-tag "Print Color"
- :tag "Print Color"
- (const :tag "Do NOT Print Color" nil)
- (const :tag "Print Always Color" t)
- (const :tag "Print Black/White Color" black-white))
- :version "20"
- :group 'ps-print-color)
- (defcustom ps-default-fg nil
- "RGB values of the default foreground color.
- The `ps-default-fg' variable contains the default foreground color used by
- ps-print, that is, if there is a face in a text that doesn't have a foreground
- color, the `ps-default-fg' color should be used.
- Valid values are:
- t The foreground color of Emacs session will be used.
- frame-parameter The foreground-color frame parameter will be used.
- NUMBER It's a real value between 0.0 (black) and 1.0 (white) that
- indicate the gray color.
- COLOR-NAME It's a string which contains the color name. For example:
- \"yellow\".
- LIST It's a list of RGB values, that is a list of three real values
- of the form:
- (RED GREEN BLUE)
- Where RED, GREEN and BLUE are reals between 0.0 (no color) and
- 1.0 (full color).
- Any other value is ignored and black color will be used.
- This variable is used only when `ps-print-color-p' (which see) is neither nil
- nor black-white."
- :type '(choice :menu-tag "Default Foreground Gray/Color"
- :tag "Default Foreground Gray/Color"
- (const :tag "Session Foreground" t)
- (const :tag "Frame Foreground" frame-parameter)
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue")))
- :version "20"
- :group 'ps-print-color)
- (defcustom ps-default-bg nil
- "RGB values of the default background color.
- The `ps-default-bg' variable contains the default background color used by
- ps-print, that is, if there is a face in a text that doesn't have a background
- color, the `ps-default-bg' color should be used.
- Valid values are:
- t The background color of Emacs session will be used.
- frame-parameter The background-color frame parameter will be used.
- NUMBER It's a real value between 0.0 (black) and 1.0 (white) that
- indicate the gray color.
- COLOR-NAME It's a string which contains the color name. For example:
- \"yellow\".
- LIST It's a list of RGB values, that is a list of three real values
- of the form:
- (RED GREEN BLUE)
- Where RED, GREEN and BLUE are reals between 0.0 (no color) and
- 1.0 (full color).
- Any other value is ignored and white color will be used.
- This variable is used only when `ps-print-color-p' (which see) is neither nil
- nor black-white.
- See also `ps-use-face-background'."
- :type '(choice :menu-tag "Default Background Gray/Color"
- :tag "Default Background Gray/Color"
- (const :tag "Session Background" t)
- (const :tag "Frame Background" frame-parameter)
- (number :tag "Gray Scale" :value 1.0)
- (string :tag "Color Name" :value "white")
- (list :tag "RGB Color" :value (1.0 1.0 1.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue")))
- :version "20"
- :group 'ps-print-color)
- (defcustom ps-fg-list nil
- "Specify foreground color list.
- This list is used to chose a text foreground color which is different than the
- background color. It'll be used the first foreground color in `ps-fg-list'
- which is different from the background color.
- If this list is nil, the default foreground color is used. See
- `ps-default-fg'.
- The list element valid values are:
- NUMBER It's a real value between 0.0 (black) and 1.0 (white) that
- indicate the gray color.
- COLOR-NAME It's a string which contains the color name. For example:
- \"yellow\".
- LIST It's a list of RGB values, that is a list of three real values
- of the form:
- (RED GREEN BLUE)
- Where RED, GREEN and BLUE are reals between 0.0 (no color) and
- 1.0 (full color).
- Any other value is ignored and black color will be used.
- This variable is used only when `ps-fg-validate-p' (which see) is non-nil and
- when `ps-print-color-p' (which see) is neither nil nor black-white."
- :type '(repeat
- (choice :menu-tag "Foreground Gray/Color"
- :tag "Foreground Gray/Color"
- (number :tag "Gray Scale" :value 0.0)
- (string :tag "Color Name" :value "black")
- (list :tag "RGB Color" :value (0.0 0.0 0.0)
- (number :tag "Red")
- (number :tag "Green")
- (number :tag "Blue"))))
- :version "22"
- :group 'ps-print-color)
- (defcustom ps-fg-validate-p t
- "Non-nil means validate if foreground color is different than background.
- If text foreground and background colors are equals, no text will appear.
- See also `ps-fg-list'."
- :type 'boolean
- :version "22"
- :group 'ps-print-color)
- (defcustom ps-auto-font-detect t
- "Non-nil means automatically detect bold/italic/underline face attributes.
- If nil, we rely solely on the lists `ps-bold-faces', `ps-italic-faces', and
- `ps-underlined-faces'."
- :type 'boolean
- :version "20"
- :group 'ps-print-font)
- (defcustom ps-black-white-faces
- '((font-lock-builtin-face "black" nil bold )
- (font-lock-comment-face "gray20" nil italic)
- (font-lock-constant-face "black" nil bold )
- (font-lock-function-name-face "black" nil bold )
- (font-lock-keyword-face "black" nil bold )
- (font-lock-string-face "black" nil italic)
- (font-lock-type-face "black" nil italic)
- (font-lock-variable-name-face "black" nil bold italic)
- (font-lock-warning-face "black" nil bold italic))
- "Specify list of face attributes to print colors on black/white printers.
- The list elements are the same as defined on `ps-extend-face' (which see).
- This variable is used only when `ps-print-color-p' is set to `black-white'."
- :version "21.1"
- :type '(repeat
- (list :tag "Face Specification"
- (face :tag "Face Symbol")
- (choice :menu-tag "Foreground Color"
- :tag "Foreground Color"
- (const :tag "Black" nil)
- (string :tag "Color Name"))
- (choice :menu-tag "Background Color"
- :tag "Background Color"
- (const :tag "None" nil)
- (string :tag "Color Name"))
- (repeat :inline t
- (choice :menu-tag "Attribute"
- (const bold)
- (const italic)
- (const underline)
- (const strikeout)
- (const overline)
- (const shadow)
- (const box)
- (const outline)))))
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-bold-faces
- (unless ps-print-color-p
- '(font-lock-function-name-face
- font-lock-builtin-face
- font-lock-variable-name-face
- font-lock-keyword-face
- font-lock-warning-face))
- "A list of the \(non-bold\) faces that should be printed in bold font.
- This applies to generating PostScript."
- :type '(repeat face)
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-italic-faces
- (unless ps-print-color-p
- '(font-lock-variable-name-face
- font-lock-type-face
- font-lock-string-face
- font-lock-comment-face
- font-lock-warning-face))
- "A list of the \(non-italic\) faces that should be printed in italic font.
- This applies to generating PostScript."
- :type '(repeat face)
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-underlined-faces
- (unless ps-print-color-p
- '(font-lock-function-name-face
- font-lock-constant-face
- font-lock-warning-face))
- "A list of the \(non-underlined\) faces that should be printed underlined.
- This applies to generating PostScript."
- :type '(repeat face)
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-use-face-background nil
- "Specify if face background should be used.
- Valid values are:
- t always use face background color.
- nil never use face background color.
- (face...) list of faces whose background color will be used.
- Any other value will be treated as t."
- :type '(choice :menu-tag "Use Face Background"
- :tag "Use Face Background"
- (const :tag "Always Use Face Background" t)
- (const :tag "Never Use Face Background" nil)
- (repeat :menu-tag "Face Background List"
- :tag "Face Background List"
- face))
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-left-header
- (list 'ps-get-buffer-name 'ps-header-dirpart)
- "The items to display (each on a line) on the left part of the page header.
- This applies to generating PostScript.
- The value should be a list of strings and symbols, each representing an entry
- in the PostScript array HeaderLinesLeft.
- Strings are inserted unchanged into the array; those representing
- PostScript string literals should be delimited with PostScript string
- delimiters '(' and ')'.
- For symbols with bound functions, the function is called and should return a
- string to be inserted into the array. For symbols with bound values, the value
- should be a string to be inserted into the array. In either case, function or
- variable, the string value has PostScript string delimiters added to it.
- If symbols are unbounded, they are silently ignored."
- :type '(repeat (choice :menu-tag "Left Header"
- :tag "Left Header"
- string symbol))
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-right-header
- (list "/pagenumberstring load"
- 'ps-time-stamp-locale-default 'ps-time-stamp-hh:mm:ss)
- "The items to display (each on a line) on the right part of the page header.
- This applies to generating PostScript.
- See the variable `ps-left-header' for a description of the format of this
- variable.
- There are the following basic functions implemented:
- `ps-time-stamp-locale-default' Return the locale's \"preferred\" date
- as, for example, \"06/18/01\".
- `ps-time-stamp-hh:mm:ss' Return time as \"17:28:31\".
- `ps-time-stamp-mon-dd-yyyy' Return date as \"Jun 18 2001\".
- `ps-time-stamp-yyyy-mm-dd' Return date as \"2001-06-18\" (ISO
- date).
- `ps-time-stamp-iso8601' Alias for `ps-time-stamp-yyyy-mm-dd'.
- You can also create your own time stamp function by using `format-time-string'
- \(which see)."
- :type '(repeat (choice :menu-tag "Right Header"
- :tag "Right Header"
- string symbol))
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-left-footer
- (list 'ps-get-buffer-name 'ps-header-dirpart)
- "The items to display (each on a line) on the left part of the page footer.
- This applies to generating PostScript.
- The value should be a list of strings and symbols, each representing an entry
- in the PostScript array FooterLinesLeft.
- Strings are inserted unchanged into the array; those representing PostScript
- string literals should be delimited with PostScript string delimiters '(' and
- ')'.
- For symbols with bound functions, the function is called and should return a
- string to be inserted into the array. For symbols with bound values, the value
- should be a string to be inserted into the array. In either case, function or
- variable, the string value has PostScript string delimiters added to it.
- If symbols are unbounded, they are silently ignored."
- :type '(repeat (choice :menu-tag "Left Footer"
- :tag "Left Footer"
- string symbol))
- :version "21.1"
- :group 'ps-print-headers)
- (defcustom ps-right-footer
- (list "/pagenumberstring load"
- 'ps-time-stamp-locale-default 'ps-time-stamp-hh:mm:ss)
- "The items to display (each on a line) on the right part of the page footer.
- This applies to generating PostScript.
- See the variable `ps-left-footer' for a description of the format of this
- variable.
- There are the following basic functions implemented:
- `ps-time-stamp-locale-default' Return the locale's \"preferred\" date
- as, for example, \"06/18/01\".
- `ps-time-stamp-hh:mm:ss' Return time as \"17:28:31\".
- `ps-time-stamp-mon-dd-yyyy' Return date as \"Jun 18 2001\".
- `ps-time-stamp-yyyy-mm-dd' Return date as \"2001-06-18\" (ISO
- date).
- `ps-time-stamp-iso8601' Alias for `ps-time-stamp-yyyy-mm-dd'.
- You can also create your own time stamp function by using `format-time-string'
- \(which see)."
- :type '(repeat (choice :menu-tag "Right Footer"
- :tag "Right Footer"
- string symbol))
- :version "21.1"
- :group 'ps-print-headers)
- (defcustom ps-razzle-dazzle t
- "Non-nil means report progress while formatting buffer."
- :type 'boolean
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-adobe-tag "%!PS-Adobe-3.0\n"
- "Contains the header line identifying the output as PostScript.
- By default, `ps-adobe-tag' contains the standard identifier. Some printers
- require slightly different versions of this line."
- :type 'string
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-build-face-reference t
- "Non-nil means build the reference face lists.
- ps-print sets this value to nil after it builds its internal reference lists of
- bold and italic faces. By setting its value back to t, you can force ps-print
- to rebuild the lists the next time you invoke one of the ...-with-faces
- commands.
- You should set this value back to t after you change the attributes of any
- face, or create new faces. Most users shouldn't have to worry about its
- setting, though."
- :type 'boolean
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-always-build-face-reference nil
- "Non-nil means always rebuild the reference face lists.
- If this variable is non-nil, ps-print will rebuild its internal reference lists
- of bold and italic faces *every* time one of the ...-with-faces commands is
- called. Most users shouldn't need to set this variable."
- :type 'boolean
- :version "20"
- :group 'ps-print-face)
- (defcustom ps-banner-page-when-duplexing nil
- "Non-nil means the very first page is skipped.
- It's like the very first character of buffer (or region) is ^L (\\014)."
- :type 'boolean
- :version "20"
- :group 'ps-print-headers)
- (defcustom ps-postscript-code-directory
- (or (if (featurep 'xemacs)
- (cond ((fboundp 'locate-data-directory)
- (funcall 'locate-data-directory "ps-print"))
- ((boundp 'data-directory)
- (symbol-value 'data-directory))
- (t
- nil))
- data-directory)
- (error "`ps-postscript-code-directory' isn't set properly"))
- "Directory where it's located the PostScript prologue file used by ps-print.
- By default, this directory is the same as in the variable `data-directory'."
- :type 'directory
- :version "20"
- :group 'ps-print-miscellany)
- (defcustom ps-line-spacing 0
- "Specify line spacing, in points, for ordinary text.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE).
- See also `ps-paragraph-spacing' and `ps-paragraph-regexp'.
- To get all lines with some spacing set both `ps-line-spacing' and
- `ps-paragraph-spacing' variables."
- :type '(choice :menu-tag "Line Spacing For Ordinary Text"
- :tag "Line Spacing For Ordinary Text"
- (number :tag "Line Spacing")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Line Spacing")
- (number :tag "Portrait Line Spacing")))
- :version "21.1"
- :group 'ps-print-miscellany)
- (defcustom ps-paragraph-spacing 0
- "Specify paragraph spacing, in points, for ordinary text.
- Either a float or a cons of floats (LANDSCAPE-SIZE . PORTRAIT-SIZE).
- See also `ps-line-spacing' and `ps-paragraph-regexp'.
- To get all lines with some spacing set both `ps-line-spacing' and
- `ps-paragraph-spacing' variables."
- :type '(choice :menu-tag "Paragraph Spacing For Ordinary Text"
- :tag "Paragraph Spacing For Ordinary Text"
- (number :tag "Paragraph Spacing")
- (cons :tag "Landscape/Portrait"
- (number :tag "Landscape Paragraph Spacing")
- (number :tag "Portrait Paragraph Spacing")))
- :version "21.1"
- :group 'ps-print-miscellany)
- (defcustom ps-paragraph-regexp "[ \t]*$"
- "Specify paragraph delimiter.
- It should be a regexp or nil.
- See also `ps-paragraph-spacing'."
- :type '(choice :menu-tag "Paragraph Delimiter"
- (const :tag "No Delimiter" nil)
- (regexp :tag "Delimiter Regexp"))
- :version "21.1"
- :group 'ps-print-miscellany)
- (defcustom ps-begin-cut-regexp nil
- "Specify regexp which is start of a region to cut out when printing.
- As an example, variables `ps-begin-cut-regexp' and `ps-end-cut-regexp' may be
- set to \"^Local Variables:\" and \"^End:\", respectively, in order to leave out
- some special printing instructions from the actual print. Special printing
- instructions may be appended to the end of the file just like any other
- buffer-local variables. See section \"Local Variables in Files\" on Emacs
- manual for more information.
- Variables `ps-begin-cut-regexp' and `ps-end-cut-regexp' control together what
- actually gets printed. Both variables may be set to nil in which case no
- cutting occurs."
- :type '(choice (const :tag "No Delimiter" nil)
- (regexp :tag "Delimiter Regexp"))
- :version "21.1"
- :group 'ps-print-miscellany)
- (defcustom ps-end-cut-regexp nil
- "Specify regexp which is end of the region to cut out when printing.
- See `ps-begin-cut-regexp' for more information."
- :type '(choice (const :tag "No Delimiter" nil)
- (regexp :tag "Delimiter Regexp"))
- :version "21.1"
- :group 'ps-print-miscellany)
- (defvar ps-last-selected-pages nil
- "Latest `ps-selected-pages' value.")
- (defun ps-restore-selected-pages ()
- "Restore latest `ps-selected-pages' value."
- (interactive)
- (setq ps-selected-pages ps-last-selected-pages))
- (defun ps-print-customize ()
- "Customization of ps-print group."
- (interactive)
- (customize-group 'ps-print))
- (defun ps-print-buffer (&optional filename)
- "Generate and print a PostScript image of the buffer.
- Interactively, when you use a prefix argument (\\[universal-argument]), the command prompts the
- user for a file name, and saves the PostScript image in that file instead of
- sending it to the printer.
- Noninteractively, the argument FILENAME is treated as follows: if it is nil,
- send the image to the printer. If FILENAME is a string, save the PostScript
- image in a file with that name."
- (interactive (list (ps-print-preprint current-prefix-arg)))
- (ps-print-without-faces (point-min) (point-max) filename))
- (defun ps-print-buffer-with-faces (&optional filename)
- "Generate and print a PostScript image of the buffer.
- Like `ps-print-buffer', but includes font, color, and underline information in
- the generated image. This command works only if you are using a window system,
- so it has a way to determine color values."
- (interactive (list (ps-print-preprint current-prefix-arg)))
- (ps-print-with-faces (point-min) (point-max) filename))
- (defun ps-print-region (from to &optional filename)
- "Generate and print a PostScript image of the region.
- Like `ps-print-buffer', but prints just the current region."
- (interactive (ps-print-preprint-region current-prefix-arg))
- (ps-print-without-faces from to filename t))
- (defun ps-print-region-with-faces (from to &optional filename)
- "Generate and print a PostScript image of the region.
- Like `ps-print-region', but includes font, color, and underline information in
- the generated image. This command works only if you are using a window system,
- so it has a way to determine color values."
- (interactive (ps-print-preprint-region current-prefix-arg))
- (ps-print-with-faces from to filename t))
- (defun ps-spool-buffer ()
- "Generate and spool a PostScript image of the buffer.
- Like `ps-print-buffer' except that the PostScript image is saved in a local
- buffer to be sent to the printer later.
- Use the command `ps-despool' to send the spooled images to the printer."
- (interactive)
- (ps-spool-without-faces (point-min) (point-max)))
- (defun ps-spool-buffer-with-faces ()
- "Generate and spool a PostScript image of the buffer.
- Like `ps-spool-buffer', but includes font, color, and underline information in
- the generated image. This command works only if you are using a window system,
- so it has a way to determine color values.
- Use the command `ps-despool' to send the spooled images to the printer."
- (interactive)
- (ps-spool-with-faces (point-min) (point-max)))
- (defun ps-spool-region (from to)
- "Generate a PostScript image of the region and spool locally.
- Like `ps-spool-buffer', but spools just the current region.
- Use the command `ps-despool' to send the spooled images to the printer."
- (interactive "r")
- (ps-spool-without-faces from to t))
- (defun ps-spool-region-with-faces (from to)
- "Generate a PostScript image of the region and spool locally.
- Like `ps-spool-region', but includes font, color, and underline information in
- the generated image. This command works only if you are using a window system,
- so it has a way to determine color values.
- Use the command `ps-despool' to send the spooled images to the printer."
- (interactive "r")
- (ps-spool-with-faces from to t))
- (defun ps-despool (&optional filename)
- "Send the spooled PostScript to the printer.
- Interactively, when you use a prefix argument (\\[universal-argument]), the command prompts the
- user for a file name, and saves the spooled PostScript image in that file
- instead of sending it to the printer.
- Noninteractively, the argument FILENAME is treated as follows: if it is nil,
- send the image to the printer. If FILENAME is a string, save the PostScript
- image in a file with that name."
- (interactive (list (ps-print-preprint current-prefix-arg)))
- (ps-do-despool filename))
- (defun ps-line-lengths ()
- "Display the correspondence between a line length and a font size.
- Done using the current ps-print setup.
- Try: pr -t file | awk '{printf \"%3d %s\n\", length($0), $0}' | sort -r | head"
- (interactive)
- (ps-line-lengths-internal))
- (defun ps-nb-pages-buffer (nb-lines)
- "Display number of pages to print this buffer, for various font heights.
- The table depends on the current ps-print setup."
- (interactive (ps-count-lines-preprint (point-min) (point-max)))
- (ps-nb-pages nb-lines))
- (defun ps-nb-pages-region (nb-lines)
- "Display number of pages to print the region, for various font heights.
- The table depends on the current ps-print setup."
- (interactive (ps-count-lines-preprint (mark) (point)))
- (ps-nb-pages nb-lines))
- (defvar ps-prefix-quote nil
- "Used for `ps-print-quote' (which see).")
- (defun ps-setup ()
- "Return the current PostScript-generation setup."
- (let (ps-prefix-quote)
- (mapconcat
- #'ps-print-quote
- (list
- (concat "\n;;; (" (if (featurep 'xemacs) "XEmacs" "Emacs")
- ") ps-print version " ps-print-version "\n")
- ";; internal vars"
- (ps-comment-string "emacs-version " emacs-version)
- (ps-comment-string "ps-windows-system " ps-windows-system)
- (ps-comment-string "ps-lp-system " ps-lp-system)
- nil
- '(25 . ps-print-color-p)
- '(25 . ps-lpr-command)
- '(25 . ps-lpr-switches)
- '(25 . ps-printer-name)
- '(25 . ps-printer-name-option)
- '(25 . ps-print-region-function)
- '(25 . ps-manual-feed)
- '(25 . ps-end-with-control-d)
- nil
- '(23 . ps-paper-type)
- '(23 . ps-warn-paper-type)
- '(23 . ps-landscape-mode)
- '(23 . ps-print-upside-down)
- '(23 . ps-number-of-columns)
- nil
- '(23 . ps-zebra-stripes)
- '(23 . ps-zebra-stripe-height)
- '(23 . ps-zebra-stripe-follow)
- '(23 . ps-zebra-color)
- '(23 . ps-line-number)
- '(23 . ps-line-number-step)
- '(23 . ps-line-number-start)
- nil
- '(17 . ps-razzle-dazzle)
- '(17 . ps-default-bg)
- '(17 . ps-default-fg)
- '(17 . ps-fg-validate-p)
- '(17 . ps-fg-list)
- nil
- '(23 . ps-use-face-background)
- nil
- '(28 . ps-print-control-characters)
- nil
- '(26 . ps-print-background-image)
- nil
- '(25 . ps-print-background-text)
- nil
- '(29 . ps-error-handler-message)
- '(29 . ps-user-defined-prologue)
- '(29 . ps-print-prologue-header)
- '(29 . ps-postscript-code-directory)
- '(29 . ps-adobe-tag)
- nil
- '(30 . ps-left-margin)
- '(30 . ps-right-margin)
- '(30 . ps-inter-column)
- '(30 . ps-bottom-margin)
- '(30 . ps-top-margin)
- '(30 . ps-print-only-one-header)
- '(30 . ps-switch-header)
- '(30 . ps-print-header)
- '(30 . ps-header-lines)
- '(30 . ps-header-offset)
- '(30 . ps-header-line-pad)
- '(30 . ps-print-header-frame)
- '(30 . ps-header-frame-alist)
- '(30 . ps-print-footer)
- '(30 . ps-footer-lines)
- '(30 . ps-footer-offset)
- '(30 . ps-footer-line-pad)
- '(30 . ps-print-footer-frame)
- '(30 . ps-footer-frame-alist)
- '(30 . ps-show-n-of-n)
- '(30 . ps-spool-config)
- '(30 . ps-spool-duplex)
- '(30 . ps-spool-tumble)
- '(30 . ps-banner-page-when-duplexing)
- '(30 . ps-left-header)
- '(30 . ps-right-header)
- '(30 . ps-left-footer)
- '(30 . ps-right-footer)
- nil
- '(23 . ps-n-up-printing)
- '(23 . ps-n-up-margin)
- '(23 . ps-n-up-border-p)
- '(23 . ps-n-up-filling)
- nil
- '(26 . ps-multibyte-buffer)
- '(26 . ps-font-family)
- '(26 . ps-font-size)
- '(26 . ps-header-font-family)
- '(26 . ps-header-font-size)
- '(26 . ps-header-title-font-size)
- '(26 . ps-footer-font-family)
- '(26 . ps-footer-font-size)
- '(26 . ps-line-number-color)
- '(26 . ps-line-number-font)
- '(26 . ps-line-number-font-size)
- '(26 . ps-line-spacing)
- '(26 . ps-paragraph-spacing)
- '(26 . ps-paragraph-regexp)
- '(26 . ps-begin-cut-regexp)
- '(26 . ps-end-cut-regexp)
- nil
- '(23 . ps-even-or-odd-pages)
- '(23 . ps-selected-pages)
- '(23 . ps-last-selected-pages)
- nil
- '(31 . ps-build-face-reference)
- '(31 . ps-always-build-face-reference)
- nil
- '(20 . ps-auto-font-detect)
- '(20 . ps-bold-faces)
- '(20 . ps-italic-faces)
- '(20 . ps-underlined-faces)
- '(20 . ps-black-white-faces)
- " )\n
- \;; The following customized variables have long lists and are seldom modified:
- \;; ps-page-dimensions-database
- \;; ps-font-info-database
- \;;; ps-print - end of settings\n")
- "\n")))
- (defun ps-print-quote (elt)
- "Quote ELT for printing (used for showing settings).
- If ELT is nil, return an empty string.
- If ELT is string, return it.
- Otherwise, ELT should be a cons (LEN . SYM) where SYM is a variable symbol and
- LEN is the field length where SYM name will be inserted. The variable
- `ps-prefix-quote' is used to form the string, if `ps-prefix-quote' is nil, it's
- used \"(setq \" as prefix; otherwise, it's used \" \". So, the string
- generated is:
- * If `ps-prefix-quote' is nil:
- \"(setq SYM-NAME SYM-VALUE\"
- |<------->|
- LEN
- * If `ps-prefix-quote' is non-nil:
- \" SYM-NAME SYM-VALUE\"
- |<------->|
- LEN
- If `ps-prefix-quote' is nil, it's set to t after generating string."
- (cond
- ((stringp elt) elt)
- ((and (consp elt) (integerp (car elt))
- (symbolp (cdr elt)) (boundp (cdr elt)))
- (let* ((col (car elt))
- (sym (cdr elt))
- (key (symbol-name sym))
- (len (length key))
- (val (symbol-value sym)))
- (concat (if ps-prefix-quote
- " "
- (setq ps-prefix-quote t)
- "(setq ")
- key
- (if (> col len)
- (make-string (- col len) ?\s)
- " ")
- (ps-value-string val))))
- (t "")
- ))
- (defun ps-value-string (val)
- "Return a string representation of VAL. Used by `ps-print-quote'."
- (cond ((null val)
- "nil")
- ((eq val t)
- "t")
- ((or (symbolp val) (listp val))
- (format "'%S" val))
- (t
- (format "%S" val))))
- (defun ps-comment-string (str value)
- "Return a comment string like \";; STR = VALUE\"."
- (format ";; %s = %s" str (ps-value-string value)))
- (defun ps-value (alist-sym key)
- "Return value from association list ALIST-SYM which car is `eq' to KEY."
- (cdr (assq key (symbol-value alist-sym))))
- (defun ps-get (alist-sym key)
- "Return element from association list ALIST-SYM which car is `eq' to KEY."
- (assq key (symbol-value alist-sym)))
- (defun ps-put (alist-sym key value)
- "Store element (KEY . VALUE) into association list ALIST-SYM.
- If KEY already exists in ALIST-SYM, modify cdr to VALUE.
- It can be retrieved with `(ps-get ALIST-SYM KEY)'."
- (let ((elt: (assq key (symbol-value alist-sym))))
- (if elt:
- (setcdr elt: value)
- (setq elt: (cons key value))
- (set alist-sym (cons elt: (symbol-value alist-sym))))
- elt:))
- (defun ps-del (alist-sym key)
- "Delete by side effect element KEY from association list ALIST-SYM."
- (let ((a:list: (symbol-value alist-sym))
- old)
- (while a:list:
- (if (eq key (car (car a:list:)))
- (progn
- (if old
- (setcdr old (cdr a:list:))
- (set alist-sym (cdr a:list:)))
- (setq a:list: nil))
- (setq old a:list:
- a:list: (cdr a:list:)))))
- (symbol-value alist-sym))
- (defun ps-time-stamp-locale-default ()
- "Return the locale's \"preferred\" date as, for example, \"06/18/01\"."
- (format-time-string "%x"))
- (defun ps-time-stamp-mon-dd-yyyy ()
- "Return date as \"Jun 18 2001\"."
- (format-time-string "%b %d %Y"))
- (defun ps-time-stamp-yyyy-mm-dd ()
- "Return date as \"2001-06-18\" (ISO date)."
- (format-time-string "%Y-%m-%d"))
- (defalias 'ps-time-stamp-iso8601 'ps-time-stamp-yyyy-mm-dd)
- (defun ps-time-stamp-hh:mm:ss ()
- "Return time as \"17:28:31\"."
- (format-time-string "%T"))
- (defvar ps-print-color-scale 1.0)
- (defun ps-color-scale (color)
-
- (mapcar #'(lambda (value) (/ value ps-print-color-scale))
- (ps-color-values color)))
- (defun ps-face-underlined-p (face)
- (or (face-underline-p face)
- (memq face ps-underlined-faces)))
- (defun ps-prologue-file (filenumber)
- "If prologue FILENUMBER exists and is readable, return contents as string.
- Note: No major/minor-mode is activated and no local variables are evaluated for
- FILENUMBER, but proper EOL-conversion and character interpretation is
- done!"
- (let ((filename (convert-standard-filename
- (expand-file-name (format "ps-prin%d.ps" filenumber)
- ps-postscript-code-directory))))
- (if (and (file-exists-p filename)
- (file-readable-p filename))
- (with-temp-buffer
- (insert-file-contents filename)
- (buffer-string))
- (error "ps-print PostScript prologue `%s' file was not found"
- filename))))
- (defvar ps-mark-code-directory nil)
- (defvar ps-print-prologue-0 ""
- "ps-print PostScript error handler.")
- (defvar ps-print-prologue-1 ""
- "ps-print PostScript prologue.")
- (defvar ps-source-buffer nil)
- (defvar ps-spool-buffer-name "*PostScript*")
- (defvar ps-spool-buffer nil)
- (defvar ps-output-head nil)
- (defvar ps-output-tail nil)
- (defvar ps-page-postscript 0)
- (defvar ps-page-order 0)
- (defvar ps-page-sheet 0)
- (defvar ps-page-column 0)
- (defvar ps-page-printed 0)
- (defvar ps-page-n-up 0)
- (defvar ps-lines-printed 0)
- (defvar ps-showline-count 1)
- (defvar ps-first-page nil)
- (defvar ps-last-page nil)
- (defvar ps-print-page-p t)
- (defvar ps-control-or-escape-regexp nil)
- (defvar ps-n-up-on nil)
- (defvar ps-background-pages nil)
- (defvar ps-background-all-pages nil)
- (defvar ps-background-text-count 0)
- (defvar ps-background-image-count 0)
- (defvar ps-current-font 0)
- (defvar ps-default-foreground nil)
- (defvar ps-default-background nil)
- (defvar ps-default-color nil)
- (defvar ps-current-color nil)
- (defvar ps-current-bg nil)
- (defvar ps-foreground-list nil)
- (defvar ps-zebra-stripe-full-p nil)
- (defvar ps-razchunk 0)
- (defvar ps-color-p nil)
- (defvar ps-header-pad 0
- "Vertical and horizontal space between the header frame and the text.
- This is in units of points (1/72 inch).")
- (defvar ps-footer-pad 0
- "Vertical and horizontal space between the footer frame and the text.
- This is in units of points (1/72 inch).")
- (defmacro ps-page-dimensions-get-width (dims) `(nth 0 ,dims))
- (defmacro ps-page-dimensions-get-height (dims) `(nth 1 ,dims))
- (defmacro ps-page-dimensions-get-media (dims) `(nth 2 ,dims))
- (defvar ps-landscape-page-height nil)
- (defvar ps-print-width nil)
- (defvar ps-print-height nil)
- (defvar ps-height-remaining nil)
- (defvar ps-width-remaining nil)
- (defvar ps-font-size-internal nil)
- (defvar ps-header-font-size-internal nil)
- (defvar ps-header-title-font-size-internal nil)
- (defvar ps-footer-font-size-internal nil)
- (defvar ps-line-spacing-internal nil)
- (defvar ps-paragraph-spacing-internal nil)
- (defvar ps-black-white-faces-alist nil
- "Alist of symbolic faces used for black/white PostScript printers.
- An element of this list has the same form as `ps-print-face-extension-alist'
- \(which see).
- Don't change this list directly; instead,
- use `ps-extend-face' and `ps-extend-face-list'.
- See documentation for `ps-extend-face' for valid extension symbol.
- See also documentation for `ps-print-color-p'.")
- (defvar ps-print-face-extension-alist nil
- "Alist of symbolic faces *WITH* extension features (box, outline, etc).
- An element of this list has the following form:
- (FACE . [BITS FG BG])
- FACE is a symbol denoting a face name
- BITS is a bit vector, where each bit correspond
- to a feature (bold, underline, etc)
- (see documentation for `ps-print-face-map-alist')
- FG foreground color (string or nil)
- BG background color (string or nil)
- Don't change this list directly; instead,
- use `ps-extend-face' and `ps-extend-face-list'.
- See documentation for `ps-extend-face' for valid extension symbol.")
- (defvar ps-print-face-alist nil
- "Alist of symbolic faces *WITHOUT* extension features (box, outline, etc).
- An element of this list has the same form as an element of
- `ps-print-face-extension-alist'.
- Don't change this list directly; this list is used by `ps-face-attributes',
- `ps-map-face' and `ps-build-reference-face-lists'.")
- (defconst ps-print-face-map-alist
- '((bold . 1)
- (italic . 2)
- (underline . 4)
- (strikeout . 8)
- (overline . 16)
- (shadow . 32)
- (box . 64)
- (outline . 128))
- "Alist of all features and the corresponding bit mask.
- Each symbol correspond to one bit in a bit vector.")
- (defun ps-extend-face-list (face-extension-list &optional merge-p alist-sym)
- "Extend face in ALIST-SYM.
- If optional MERGE-P is non-nil, extensions in FACE-EXTENSION-LIST are merged
- with face extension in ALIST-SYM; otherwise, overrides.
- If optional ALIST-SYM is nil, `ps-print-face-extension-alist' is used;
- otherwise, it should be an alist symbol.
- The elements in FACE-EXTENSION-LIST are like those for `ps-extend-face'.
- See `ps-extend-face' for documentation."
- (while face-extension-list
- (ps-extend-face (car face-extension-list) merge-p alist-sym)
- (setq face-extension-list (cdr face-extension-list))))
- (defun ps-extend-face (face-extension &optional merge-p alist-sym)
- "Extend face in ALIST-SYM.
- If optional MERGE-P is non-nil, extensions in FACE-EXTENSION list are merged
- with face extensions in ALIST-SYM; otherwise, overrides.
- If optional ALIST-SYM is nil, `ps-print-face-extension-alist' is used;
- otherwise, it should be an alist symbol.
- The elements of FACE-EXTENSION list have the form:
- (FACE-NAME FOREGROUND BACKGROUND EXTENSION...)
- FACE-NAME is a face name symbol.
- FOREGROUND and BACKGROUND may be nil or a string that denotes the
- foreground and background colors respectively.
- EXTENSION is one of the following symbols:
- bold - use bold font.
- italic - use italic font.
- underline - put a line under text.
- strikeout - like underline, but the line is in middle of text.
- overline - like underline, but the line is over the text.
- shadow - text will have a shadow.
- box - text will be surrounded by a box.
- outline - print characters as hollow outlines.
- If EXTENSION is any other symbol, it is ignored."
- (or alist-sym
- (setq alist-sym 'ps-print-face-extension-alist))
- (let* ((background (nth 2 face-extension))
- (foreground (nth 1 face-extension))
- (face-name (nth 0 face-extension))
- (ps-face (cdr (assq face-name (symbol-value alist-sym))))
- (face-vector (or ps-face (vector 0 nil nil)))
- (face-bit (ps-extension-bit face-extension)))
-
- (aset face-vector 0 (if merge-p
- (logior (aref face-vector 0) face-bit)
- face-bit))
- (and (or (not merge-p) (and foreground (stringp foreground)))
- (aset face-vector 1 foreground))
- (and (or (not merge-p) (and background (stringp background)))
- (aset face-vector 2 background))
-
- (or ps-face
- (set alist-sym (cons (cons face-name face-vector)
- (symbol-value alist-sym))))))
- (defun ps-extension-bit (face-extension)
- (let ((face-bit 0))
-
- (setq face-extension (cdr (cdr face-extension)))
- (while (setq face-extension (cdr face-extension))
- (setq face-bit (logior face-bit
- (or (cdr (assq (car face-extension)
- ps-print-face-map-alist))
- 0))))
- face-bit))
- (defun ps-font-lock-face-attributes ()
- (and (boundp 'font-lock-mode) (symbol-value 'font-lock-mode)
- (boundp 'font-lock-face-attributes)
- (let ((face-attributes (symbol-value 'font-lock-face-attributes)))
- (while face-attributes
- (let* ((face-attribute
- (car (prog1 face-attributes
- (setq face-attributes (cdr face-attributes)))))
- (face (car face-attribute)))
-
-
- (unless (get face 'saved-face)
- (let ((foreground (nth 1 face-attribute))
- (background (nth 2 face-attribute))
- (bold-p (nth 3 face-attribute))
- (italic-p (nth 4 face-attribute))
- (underline-p (nth 5 face-attribute))
- face-spec)
- (when foreground
- (setq face-spec (cons ':foreground
- (cons foreground face-spec))))
- (when background
- (setq face-spec (cons ':background
- (cons background face-spec))))
- (when bold-p
- (setq face-spec (append '(:weight bold) face-spec)))
- (when italic-p
- (setq face-spec (append '(:slant italic) face-spec)))
- (when underline-p
- (setq face-spec (append '(:underline t) face-spec)))
- (custom-declare-face face (list (list t face-spec)) nil)
- )))))))
- (defun ps-message-log-max ()
- (and (not (string= (buffer-name) "*Messages*"))
- (boundp 'message-log-max)
- message-log-max))
- (defvar ps-print-hook nil)
- (defvar ps-print-begin-sheet-hook nil)
- (defvar ps-print-begin-page-hook nil)
- (defvar ps-print-begin-column-hook nil)
- (defun ps-print-without-faces (from to &optional filename region-p)
- (ps-spool-without-faces from to region-p)
- (ps-do-despool filename))
- (defun ps-spool-without-faces (from to &optional region-p)
- (let ((message-log-max (ps-message-log-max)))
- (run-hooks 'ps-print-hook)
- (ps-printing-region region-p from to)
- (ps-generate (current-buffer) from to 'ps-generate-postscript)))
- (defun ps-print-with-faces (from to &optional filename region-p)
- (ps-spool-with-faces from to region-p)
- (ps-do-despool filename))
- (defun ps-spool-with-faces (from to &optional region-p)
- (let ((message-log-max (ps-message-log-max)))
- (run-hooks 'ps-print-hook)
- (ps-printing-region region-p from to)
- (ps-generate (current-buffer) from to 'ps-generate-postscript-with-faces)))
- (defun ps-count-lines-preprint (from to)
- (or (and from to)
- (error "The mark is not set now"))
- (let ((message-log-max (ps-message-log-max)))
- (list (count-lines from to))))
- (defun ps-count-lines (from to)
- (+ (count-lines from to)
- (save-excursion
- (goto-char to)
- (if (= (current-column) 0) 1 0))))
- (defvar ps-printing-region nil
- "Variable used to indicate the region that ps-print is printing.
- It is a cons, the car of which is the line number where the region begins, and
- its cdr is the total number of lines in the buffer. Formatting functions can
- use this information to print the original line number (and not the number of
- lines printed), and to indicate in the header that the printout is of a partial
- file.")
- (defvar ps-printing-region-p nil
- "Non-nil means ps-print is printing a region.")
- (defun ps-printing-region (region-p from to)
- (setq ps-printing-region-p region-p
- ps-printing-region
- (cons (if region-p
- (ps-count-lines (point-min) (min from to))
- 1)
- (ps-count-lines (point-min) (point-max)))))
- (defsubst ps-font-alist (font-sym)
- (get font-sym 'fonts))
- (defun ps-font (font-sym font-type)
- "Font family name for text of `font-type', when generating PostScript."
- (let* ((font-list (ps-font-alist font-sym))
- (normal-font (cdr (assq 'normal font-list))))
- (while (and font-list (not (eq font-type (car (car font-list)))))
- (setq font-list (cdr font-list)))
- (or (cdr (car font-list)) normal-font)))
- (defsubst ps-fonts (font-sym)
- (mapcar 'cdr (ps-font-alist font-sym)))
- (defsubst ps-font-number (font-sym font-type)
- (or (ps-alist-position font-type (ps-font-alist font-sym))
- 0))
- (defsubst ps-line-height (font-sym)
- "The height of a line, for generating PostScript.
- This is the value that ps-print uses to determine the height,
- y-dimension, of the lines of text it has printed, and thus affects the
- point at which page-breaks are placed.
- The line-height is *not* the same as the point size of the font."
- (get font-sym 'line-height))
- (defsubst ps-title-line-height (font-sym)
- "The height of a `title' line, for generating PostScript.
- This is the value that ps-print uses to determine the height,
- y-dimension, of the lines of text it has printed, and thus affects the
- point at which page-breaks are placed.
- The title-line-height is *not* the same as the point size of the font."
- (get font-sym 'title-line-height))
- (defsubst ps-space-width (font-sym)
- "The width of a space character, for generating PostScript.
- This value is used in expanding tab characters."
- (get font-sym 'space-width))
- (defsubst ps-avg-char-width (font-sym)
- "The average width, in points, of a character, for generating PostScript.
- This is the value that ps-print uses to determine the length,
- x-dimension, of the text it has printed, and thus affects the point at
- which long lines wrap around."
- (get font-sym 'avg-char-width))
- (defun ps-line-lengths-internal ()
- "Display the correspondence between a line length and a font size.
- Done using the current ps-print setup.
- Try: pr -t file | awk '{printf \"%3d %s\n\", length($0), $0}' | sort -r | head"
- (let* ((ps-font-size-internal
- (or ps-font-size-internal
- (ps-get-font-size 'ps-font-size)))
- (ps-header-font-size-internal
- (or ps-header-font-size-internal
- (ps-get-font-size 'ps-header-font-size)))
- (ps-footer-font-size-internal
- (or ps-footer-font-size-internal
- (ps-get-font-size 'ps-footer-font-size)))
- (ps-header-title-font-size-internal
- (or ps-header-title-font-size-internal
- (ps-get-font-size 'ps-header-title-font-size)))
- (buf (get-buffer-create "*Line-lengths*"))
- (ifs ps-font-size-internal)
- (print-width (progn (ps-get-page-dimensions)
- ps-print-width))
- (icw (ps-avg-char-width 'ps-font-for-text))
- (ps-setup (ps-setup))
- (fs-min 5)
- cw-min
- nb-cpl-max
- (fs-max 14)
- cw-max
- nb-cpl-min
- fs
- cw
- nb-cpl
- )
- (setq cw-min (/ (* icw fs-min) ifs)
- nb-cpl-max (floor (/ print-width cw-min))
- cw-max (/ (* icw fs-max) ifs)
- nb-cpl-min (floor (/ print-width cw-max))
- nb-cpl nb-cpl-min)
- (set-buffer buf)
- (goto-char (point-max))
- (or (bobp) (insert "\n" (make-string 75 ?\
- (insert ps-setup
- "\nnb char per line / font size\n")
- (while (<= nb-cpl nb-cpl-max)
- (setq cw (/ print-width (float nb-cpl))
- fs (/ (* ifs cw) icw))
- (insert (format "%16d %s\n" nb-cpl fs))
- (setq nb-cpl (1+ nb-cpl)))
- (insert "\n")
- (display-buffer buf 'not-this-window)))
- (defun ps-nb-pages (nb-lines)
- "Display correspondence between font size and the number of pages.
- The correspondence is based on having NB-LINES lines of text,
- and on the current ps-print setup."
- (let* ((ps-font-size-internal
- (or ps-font-size-internal
- (ps-get-font-size 'ps-font-size)))
- (ps-header-font-size-internal
- (or ps-header-font-size-internal
- (ps-get-font-size 'ps-header-font-size)))
- (ps-footer-font-size-internal
- (or ps-footer-font-size-internal
- (ps-get-font-size 'ps-footer-font-size)))
- (ps-header-title-font-size-internal
- (or ps-header-title-font-size-internal
- (ps-get-font-size 'ps-header-title-font-size)))
- (ps-line-spacing-internal
- (or ps-line-spacing-internal
- (ps-get-size ps-line-spacing "line spacing")))
- (buf (get-buffer-create "*Nb-Pages*"))
- (ils ps-line-spacing-internal)
- (ifs ps-font-size-internal)
- (page-height (progn (ps-get-page-dimensions)
- ps-print-height))
- (ilh (ps-line-height 'ps-font-for-text))
- (ps-setup (ps-setup))
- (fs-min 4)
- lh-min
- nb-lpp-max
- nb-page-min
- (fs-max 14)
- lh-max
- nb-lpp-min
- nb-page-max
- fs
- lh
- nb-lpp
- nb-page
- )
- (setq lh-min (/ (- (* (+ ilh ils) fs-min) ils) ifs)
- nb-lpp-max (floor (/ page-height lh-min))
- nb-page-min (ceiling (/ (float nb-lines) nb-lpp-max))
- lh-max (/ (- (* (+ ilh ils) fs-max) ils) ifs)
- nb-lpp-min (floor (/ page-height lh-max))
- nb-page-max (ceiling (/ (float nb-lines) nb-lpp-min))
- nb-page nb-page-min)
- (set-buffer buf)
- (goto-char (point-max))
- (or (bobp) (insert "\n" (make-string 75 ?\
- (insert ps-setup
- (format "\nThere are %d lines.\n\n" nb-lines)
- "nb page / font size\n")
- (while (<= nb-page nb-page-max)
- (setq nb-lpp (ceiling (/ nb-lines (float nb-page)))
- lh (/ page-height nb-lpp)
- fs (/ (* ifs lh) ilh))
- (insert (format "%7d %s\n" nb-page fs))
- (setq nb-page (1+ nb-page)))
- (insert "\n")
- (display-buffer buf 'not-this-window)))
- (defmacro ps-lookup (key) `(cdr (assq ,key font-entry)))
- (defmacro ps-size-scale (key) `(/ (* (ps-lookup ,key) font-size) size))
- (defun ps-select-font (font-family sym font-size title-font-size)
- (let ((font-entry (cdr (assq font-family ps-font-info-database))))
- (or font-entry
- (error "Don't have data to scale font %s. Known fonts families are %s"
- font-family
- (mapcar 'car ps-font-info-database)))
- (let ((size (ps-lookup 'size)))
- (put sym 'fonts (ps-lookup 'fonts))
- (put sym 'space-width (ps-size-scale 'space-width))
- (put sym 'avg-char-width (ps-size-scale 'avg-char-width))
- (put sym 'line-height (ps-size-scale 'line-height))
- (put sym 'title-line-height
- (/ (* (ps-lookup 'line-height) title-font-size) size)))))
- (defun ps-get-page-dimensions ()
- (let ((page-dimensions (cdr (assq ps-paper-type ps-page-dimensions-database)))
- page-width page-height)
- (cond
- ((null page-dimensions)
- (error "`ps-paper-type' must be one of:\n%s"
- (mapcar 'car ps-page-dimensions-database)))
- ((< ps-number-of-columns 1)
- (error "The number of columns %d should be positive"
- ps-number-of-columns)))
- (ps-select-font ps-font-family 'ps-font-for-text
- ps-font-size-internal ps-font-size-internal)
- (ps-select-font ps-header-font-family 'ps-font-for-header
- ps-header-font-size-internal
- ps-header-title-font-size-internal)
- (ps-select-font ps-footer-font-family 'ps-font-for-footer
- ps-footer-font-size-internal ps-footer-font-size-internal)
- (setq page-width (ps-page-dimensions-get-width page-dimensions)
- page-height (ps-page-dimensions-get-height page-dimensions))
-
- (if ps-landscape-mode
-
- (setq page-width (prog1 page-height (setq page-height page-width))))
-
- (setq ps-landscape-page-height page-height)
-
-
-
- (setq ps-print-width (/ (- page-width
- ps-left-margin ps-right-margin
- (* (1- ps-number-of-columns) ps-inter-column))
- ps-number-of-columns))
- (if (<= ps-print-width 0)
- (error "Bad horizontal layout:
- page-width == %s
- ps-left-margin == %s
- ps-right-margin == %s
- ps-inter-column == %s
- ps-number-of-columns == %s
- | lm | text | ic | text | ic | text | rm |
- page-width == lm + n * print-width + (n - 1) * ic + rm
- => print-width == %d !"
- page-width
- ps-left-margin
- ps-right-margin
- ps-inter-column
- ps-number-of-columns
- ps-print-width))
- (setq ps-print-height
- (- page-height ps-bottom-margin ps-top-margin))
- (if (<= ps-print-height 0)
- (error "Bad vertical layout:
- ps-top-margin == %s
- ps-bottom-margin == %s
- page-height == bm + print-height + tm
- => print-height == %d !"
- ps-top-margin
- ps-bottom-margin
- ps-print-height))
-
-
- (if ps-print-header
- (setq ps-header-pad (* ps-header-line-pad
- (ps-title-line-height 'ps-font-for-header))
- ps-print-height (- ps-print-height
- ps-header-offset
- ps-header-pad
- (ps-title-line-height 'ps-font-for-header)
- (* (ps-line-height 'ps-font-for-header)
- (1- ps-header-lines))
- ps-header-pad)))
- (if (<= ps-print-height 0)
- (error "Bad vertical layout (header):
- ps-top-margin == %s
- ps-bottom-margin == %s
- ps-header-offset == %s
- ps-header-pad == %s
- header-height == %s
- page-height == bm + print-height + tm - ho - hh
- => print-height == %d !"
- ps-top-margin
- ps-bottom-margin
- ps-header-offset
- ps-header-pad
- (+ ps-header-pad
- (ps-title-line-height 'ps-font-for-header)
- (* (ps-line-height 'ps-font-for-header)
- (1- ps-header-lines))
- ps-header-pad)
- ps-print-height))
-
-
- (if ps-print-footer
- (setq ps-footer-pad (* ps-footer-line-pad
- (ps-title-line-height 'ps-font-for-footer))
- ps-print-height (- ps-print-height
- ps-footer-offset
- ps-footer-pad
- (* (ps-line-height 'ps-font-for-footer)
- (1- ps-footer-lines))
- ps-footer-pad)))
- (if (<= ps-print-height 0)
- (error "Bad vertical layout (footer):
- ps-top-margin == %s
- ps-bottom-margin == %s
- ps-footer-offset == %s
- ps-footer-pad == %s
- footer-height == %s
- page-height == bm + print-height + tm - fo - fh
- => print-height == %d !"
- ps-top-margin
- ps-bottom-margin
- ps-footer-offset
- ps-footer-pad
- (+ ps-footer-pad
- (* (ps-line-height 'ps-font-for-footer)
- (1- ps-footer-lines))
- ps-footer-pad)
- ps-print-height))
-
- (if ps-zebra-stripe-full-p
- (let* ((line-height (ps-line-height 'ps-font-for-text))
- (zebra (* (+ line-height ps-line-spacing-internal)
- ps-zebra-stripe-height)))
- (setq ps-print-height (- (* (floor ps-print-height zebra) zebra)
- line-height))
- (if (<= ps-print-height 0)
- (error "Bad vertical layout (full zebra stripe follow):
- ps-zebra-stripe-follow == %s
- ps-zebra-stripe-height == %s
- font-text-height == %s
- line-spacing == %s
- page-height == ((floor print-height ((th + ls) * zh)) * ((th + ls) * zh)) - th
- => print-height == %d !"
- ps-zebra-stripe-follow
- ps-zebra-stripe-height
- (ps-line-height 'ps-font-for-text)
- ps-line-spacing-internal
- ps-print-height))))))
- (defun ps-print-preprint-region (prefix)
- (or (ps-mark-active-p)
- (error "The mark is not set now"))
- (list (point) (mark) (ps-print-preprint prefix)))
- (defun ps-print-preprint (prefix)
- (and prefix
- (or (numberp prefix)
- (listp prefix))
- (let* ((name (concat (file-name-nondirectory (or (buffer-file-name)
- (buffer-name)))
- ".ps"))
- (prompt (format "Save PostScript to file (default %s): " name))
- (res (read-file-name prompt default-directory name nil)))
- (while (cond ((file-directory-p res)
- (ding)
- (setq prompt "It's a directory"))
- ((not (file-writable-p res))
- (ding)
- (setq prompt "File is unwritable"))
- ((file-exists-p res)
- (setq prompt "File exists")
- (not (y-or-n-p (format "File `%s' exists; overwrite? "
- res))))
- (t nil))
- (setq res (read-file-name
- (format "%s; save PostScript to file: " prompt)
- (file-name-directory res) nil nil
- (file-name-nondirectory res))))
- (if (file-directory-p res)
- (expand-file-name name (file-name-as-directory res))
- res))))
- (defvar ps-string-escape-codes
- (let ((table (make-vector 256 nil))
- (char ?\000))
-
- (while (<= char ?\037)
- (aset table char (format "\\%03o" char))
- (setq char (1+ char)))
-
- (while (< char ?\177)
- (aset table char (format "%c" char))
- (setq char (1+ char)))
-
- (while (<= char ?\377)
- (aset table char (format "\\%o" char))
- (setq char (1+ char)))
-
- (aset table ?\n "\\n")
- (aset table ?\r "\\r")
- (aset table ?\t "\\t")
- (aset table ?\b "\\b")
- (aset table ?\f "\\f")
-
- (aset table ?\\ "\\\\")
- (aset table ?\( "\\(")
- (aset table ?\) "\\)")
- table)
- "Vector used to map characters to PostScript string escape codes.")
- (defsubst ps-output-string-prim (string)
- (insert "(")
- (save-excursion
- (insert (string-as-unibyte string)))
-
-
- (while (progn (skip-chars-forward " -'*-[]-~") (not (eobp)))
- (let ((special (following-char)))
- (delete-char 1)
- (insert
- (if (and (<= 0 special) (<= special 255))
- (aref ps-string-escape-codes special)
-
- (format "\\%04X" special)
- ))))
- (goto-char (point-max))
- (insert ")"))
- (defsubst ps-init-output-queue ()
- (setq ps-output-head (list "")
- ps-output-tail ps-output-head))
- (defun ps-selected-pages ()
- (while (progn
- (setq ps-first-page (car (car ps-selected-pages))
- ps-last-page (cdr (car ps-selected-pages))
- ps-selected-pages (cdr ps-selected-pages))
- (and ps-selected-pages
- (< ps-last-page ps-page-postscript)))))
- (defsubst ps-print-page-p ()
- (setq ps-print-page-p
- (and (cond ((null ps-first-page))
- ((<= ps-page-postscript ps-last-page)
- (<= ps-first-page ps-page-postscript))
- (ps-selected-pages
- (ps-selected-pages)
- (and (<= ps-first-page ps-page-postscript)
- (<= ps-page-postscript ps-last-page)))
- (t
- nil))
- (cond ((eq ps-even-or-odd-pages 'even-page)
- (= (logand ps-page-postscript 1) 0))
- ((eq ps-even-or-odd-pages 'odd-page)
- (= (logand ps-page-postscript 1) 1))
- (t)
- ))))
- (defsubst ps-print-sheet-p ()
- (setq ps-print-page-p
- (cond ((eq ps-even-or-odd-pages 'even-sheet)
- (= (logand ps-page-sheet 1) 0))
- ((eq ps-even-or-odd-pages 'odd-sheet)
- (= (logand ps-page-sheet 1) 1))
- (t)
- )))
- (defun ps-output (&rest args)
- (when ps-print-page-p
- (setcdr ps-output-tail args)
- (while (cdr ps-output-tail)
- (setq ps-output-tail (cdr ps-output-tail)))))
- (defun ps-output-string (string)
- (ps-output t string))
- (defun ps-output-prologue (args)
- (ps-output 'prologue (if (stringp args) (list args) args)))
- (defun ps-flush-output ()
- (with-current-buffer ps-spool-buffer
- (goto-char (point-max))
- (while ps-output-head
- (let ((it (car ps-output-head)))
- (cond
- ((eq t it)
- (setq ps-output-head (cdr ps-output-head))
- (ps-output-string-prim (car ps-output-head)))
- ((eq 'prologue it)
- (setq ps-output-head (cdr ps-output-head))
- (save-excursion
- (search-backward "\nBeginDoc")
- (forward-char 1)
- (apply 'insert (car ps-output-head))))
- (t
- (insert it))))
- (setq ps-output-head (cdr ps-output-head))))
- (ps-init-output-queue))
- (defun ps-insert-file (fname)
- (ps-flush-output)
- (with-current-buffer ps-spool-buffer
- (goto-char (point-max))
- (insert-file-contents fname)))
- (defvar ps-encode-header-string-function nil)
- (defun ps-generate-header-line (fonttag &optional content)
- (ps-output " [" fonttag " ")
- (cond
-
-
- ((stringp content)
- (ps-output content))
-
-
- ((functionp content)
- (if (functionp ps-encode-header-string-function)
- (dolist (l (funcall ps-encode-header-string-function
- (funcall content) fonttag))
- (ps-output-string l))
- (ps-output-string (funcall content))))
-
-
- ((and (symbolp content) (boundp content))
- (if (fboundp ps-encode-header-string-function)
- (dolist (l (funcall ps-encode-header-string-function
- (symbol-value content) fonttag))
- (ps-output-string l))
- (ps-output-string (symbol-value content))))
-
- (t
- (ps-output-string "")))
- (ps-output "]\n"))
- (defun ps-generate-header (name fonttag0 fonttag1 contents)
- (ps-output "/" name "[\n")
- (and contents (> ps-header-lines 0)
- (let ((count 1))
- (ps-generate-header-line fonttag0 (car contents))
- (while (and (< count ps-header-lines)
- (setq contents (cdr contents)))
- (ps-generate-header-line fonttag1 (car contents))
- (setq count (1+ count)))))
- (ps-output "]def\n"))
- (defun ps-output-boolean (name bool)
- (ps-output (format "/%s %s def\n" name (if bool "true" "false"))))
- (defun ps-output-frame-properties (name alist)
- (ps-output "/" name " ["
- (ps-format-color (cdr (assq 'fore-color alist)) 0.0)
- (ps-format-color (cdr (assq 'back-color alist)) 0.9)
- (ps-float-format (or (cdr (assq 'border-width alist)) 0.4))
- (ps-format-color (cdr (assq 'border-color alist)) 0.0)
- (ps-format-color (cdr (assq 'shadow-color alist)) 0.0)
- "]def\n"))
- (defun ps-background-pages (page-list func)
- (if page-list
- (mapcar
- #'(lambda (pages)
- (let ((start (if (consp pages) (car pages) pages))
- (end (if (consp pages) (cdr pages) pages)))
- (and (integerp start) (integerp end) (<= start end)
- (add-to-list 'ps-background-pages (vector start end func)))))
- page-list)
- (setq ps-background-all-pages (cons func ps-background-all-pages))))
- (defconst ps-boundingbox-re
- "^%%BoundingBox:\
- \\s-+\\([0-9.]+\\)\\s-+\\([0-9.]+\\)\\s-+\\([0-9.]+\\)\\s-+\\([0-9.]+\\)")
- (defun ps-get-boundingbox ()
- (with-current-buffer ps-spool-buffer
- (save-excursion
- (if (re-search-forward ps-boundingbox-re nil t)
- (vector (string-to-number
- (buffer-substring (match-beginning 1) (match-end 1)))
- (string-to-number
- (buffer-substring (match-beginning 2) (match-end 2)))
- (string-to-number
- (buffer-substring (match-beginning 3) (match-end 3)))
- (string-to-number
- (buffer-substring (match-beginning 4) (match-end 4))))
- (vector 0 0 0 0)))))
- (defun ps-float-format (value &optional default)
- (let ((literal (or value default)))
- (cond ((null literal)
- " ")
- ((numberp literal)
- (format ps-float-format (* literal 1.0)))
- (t
- (format "%s " literal))
- )))
- (defun ps-background-text ()
- (mapcar
- #'(lambda (text)
- (setq ps-background-text-count (1+ ps-background-text-count))
- (ps-output (format "/ShowBackText-%d{\n" ps-background-text-count))
- (ps-output-string (nth 0 text))
- (ps-output
- "\n"
- (ps-float-format (nth 4 text) 200.0)
- (format "/%s " (or (nth 3 text) "Times-Roman"))
- (ps-float-format (nth 6 text)
- "PrintHeight PrintPageWidth atan")
- (ps-float-format (nth 5 text) 0.85)
- (ps-float-format (nth 1 text) "0")
- (ps-float-format (nth 2 text) "0")
- "\nShowBackText}def\n")
- (ps-background-pages (nthcdr 7 text)
- (format "ShowBackText-%d\n"
- ps-background-text-count)))
- ps-print-background-text))
- (defun ps-background-image ()
- (mapcar
- #'(lambda (image)
- (let ((image-file (expand-file-name (nth 0 image))))
- (when (file-readable-p image-file)
- (setq ps-background-image-count (1+ ps-background-image-count))
- (ps-output
- (format "/ShowBackImage-%d{\n--back-- "
- ps-background-image-count)
- (ps-float-format (nth 5 image) 0.0)
- (ps-float-format (nth 3 image) 1.0)
- (ps-float-format (nth 4 image) 1.0)
- (ps-float-format (nth 1 image)
- "PrintPageWidth 2 div")
- (ps-float-format (nth 2 image)
- "PrintHeight 2 div BottomMargin add")
- "\nBeginBackImage\n")
- (ps-insert-file image-file)
-
-
- (let ((box (ps-get-boundingbox)))
- (with-current-buffer ps-spool-buffer
- (save-excursion
- (if (re-search-backward "^--back--" nil t)
- (replace-match
- (format "%s %s"
- (ps-float-format
- (- (+ (/ (- (aref box 2) (aref box 0)) 2.0)
- (aref box 0))))
- (ps-float-format
- (- (+ (/ (- (aref box 3) (aref box 1)) 2.0)
- (aref box 1)))))
- t)))))
- (ps-output "\nEndBackImage}def\n")
- (ps-background-pages (nthcdr 6 image)
- (format "ShowBackImage-%d\n"
- ps-background-image-count)))))
- ps-print-background-image))
- (defun ps-background (page-number)
- (let (has-local-background)
- (mapc #'(lambda (range)
- (and (<= (aref range 0) page-number)
- (<= page-number (aref range 1))
- (if has-local-background
- (ps-output (aref range 2))
- (setq has-local-background t)
- (ps-output "/printLocalBackground{\n"
- (aref range 2)))))
- ps-background-pages)
- (and has-local-background (ps-output "}def\n"))))
- (defun ps-remove-duplicates (list)
- (let (new (tail list))
- (while tail
- (or (member (car tail) new)
- (setq new (cons (car tail) new)))
- (setq tail (cdr tail)))
- (nreverse new)))
- (defun ps-alist-position (item list)
- (let ((tail list) (index 0) found)
- (while tail
- (if (setq found (eq (car (car tail)) item))
- (setq tail nil)
- (setq index (1+ index)
- tail (cdr tail))))
- (and found index)))
- (defconst ps-n-up-database
- '((a4
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 1)
- (8 t 2 4 0)
- (9 nil 3 3 0)
- (12 t 3 4 2)
- (16 nil 4 4 0)
- (18 t 3 6 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (32 t 4 8 0)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (50 t 5 10 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (a3
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 1)
- (8 t 2 4 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (18 t 3 6 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (32 t 4 8 0)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (50 t 5 10 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (letter
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (40 t 5 8 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (legal
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 nil 3 2 1)
- (9 nil 3 3 0)
- (10 t 2 5 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (70 t 5 14 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (letter-small
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 0)
- (9 nil 3 3 0)
- (12 t 3 4 1)
- (15 t 3 5 0)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (28 t 4 7 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (40 t 5 8 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (60 t 6 10 0)
- (64 nil 8 8 0)
- (72 ni 9 8 1)
- (81 nil 9 9 0)
- (84 t 7 12 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (tabloid
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 1)
- (8 t 2 4 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (84 t 6 14 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
-
-
-
- (ledger
- (1 nil 1 1 0)
- (2 pag 1 2 0)
- (4 nil 2 2 0)
- (6 pag 2 3 1)
- (8 pag 2 4 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (84 pag 6 14 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (statement
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 nil 3 2 1)
- (9 nil 3 3 0)
- (10 t 2 5 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (21 t 3 7 0)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (40 t 4 10 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (60 t 5 12 0)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (executive
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (28 t 4 7 0)
- (30 nil 6 5 1)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (45 t 5 9 0)
- (49 nil 7 7 0)
- (56 nil 8 7 1)
- (60 t 6 10 0)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (84 t 7 12 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (a4small
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 1)
- (8 t 2 4 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (18 t 3 6 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (32 t 4 8 0)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (50 t 5 10 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (78 t 6 13 0)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (b4
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 1)
- (8 t 2 4 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (18 t 3 6 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (32 t 4 8 0)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (50 t 5 10 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 1)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (100 nil 10 10 0))
- (b5
- (1 nil 1 1 0)
- (2 t 1 2 0)
- (4 nil 2 2 0)
- (6 t 2 3 1)
- (8 t 2 4 0)
- (9 nil 3 3 0)
- (12 nil 4 3 1)
- (16 nil 4 4 0)
- (18 t 3 6 0)
- (20 nil 5 4 1)
- (25 nil 5 5 0)
- (30 nil 6 5 1)
- (32 t 4 8 0)
- (36 nil 6 6 0)
- (42 nil 7 6 1)
- (49 nil 7 7 0)
- (50 t 5 10 0)
- (56 nil 8 7 1)
- (64 nil 8 8 0)
- (72 nil 9 8 0)
- (81 nil 9 9 0)
- (90 nil 10 9 1)
- (98 t 7 14 0)
- (100 nil 10 10 0)))
- "Alist which is the page matrix database used for N-up printing.
- Each element has the following form:
- (PAGE
- (MAX LANDSCAPE LINES COLUMNS COL-MISSING)
- ...)
- Where:
- PAGE is the page size used (see `ps-paper-type').
- MAX is the maximum elements of this page matrix.
- LANDSCAPE specifies if page matrix is landscaped, has the following valid
- values:
- nil the sheet is in portrait mode.
- t the sheet is in landscape mode.
- pag the sheet is in portrait mode and page is in landscape mode.
- LINES is the number of lines of page matrix.
- COLUMNS is the number of columns of page matrix.
- COL-MISSING is the number of columns missing to fill the sheet.")
- (defmacro ps-n-up-landscape (mat) `(nth 1 ,mat))
- (defmacro ps-n-up-lines (mat) `(nth 2 ,mat))
- (defmacro ps-n-up-columns (mat) `(nth 3 ,mat))
- (defmacro ps-n-up-missing (mat) `(nth 4 ,mat))
- (defun ps-n-up-printing ()
-
- (setq ps-n-up-printing (max (min ps-n-up-printing 100) 1))
-
- (let ((the-list (cdr (assq ps-paper-type ps-n-up-database))))
- (and the-list
- (while (> ps-n-up-printing (caar the-list))
- (setq the-list (cdr the-list))))
- (or (car the-list)
- '(1 nil 1 1 0))))
- (defconst ps-n-up-filling-database
- '((left-top
- "PageWidth"
- "0"
- "N-Up-End 1 sub PageWidth mul neg"
- "LandscapePageHeight neg"
- "N-Up-Lines"
- "N-Up-Columns"
- "0"
- "0")
- (left-bottom
- "PageWidth"
- "0"
- "N-Up-End 1 sub PageWidth mul neg"
- "LandscapePageHeight"
- "N-Up-Lines"
- "N-Up-Columns"
- "0"
- "N-Up-Repeat 1 sub LandscapePageHeight mul neg")
- (right-top
- "PageWidth neg"
- "0"
- "N-Up-End 1 sub PageWidth mul"
- "LandscapePageHeight neg"
- "N-Up-Lines"
- "N-Up-Columns"
- "N-Up-End 1 sub PageWidth mul"
- "0")
- (right-bottom
- "PageWidth neg"
- "0"
- "N-Up-End 1 sub PageWidth mul"
- "LandscapePageHeight"
- "N-Up-Lines"
- "N-Up-Columns"
- "N-Up-End 1 sub PageWidth mul"
- "N-Up-Repeat 1 sub LandscapePageHeight mul neg")
- (top-left
- "0"
- "LandscapePageHeight neg"
- "PageWidth"
- "N-Up-End 1 sub LandscapePageHeight mul"
- "N-Up-Columns"
- "N-Up-Lines"
- "0"
- "0")
- (bottom-left
- "0"
- "LandscapePageHeight"
- "PageWidth"
- "N-Up-End 1 sub LandscapePageHeight mul neg"
- "N-Up-Columns"
- "N-Up-Lines"
- "0"
- "N-Up-End 1 sub LandscapePageHeight mul neg")
- (top-right
- "0"
- "LandscapePageHeight neg"
- "PageWidth neg"
- "N-Up-End 1 sub LandscapePageHeight mul"
- "N-Up-Columns"
- "N-Up-Lines"
- "N-Up-Repeat 1 sub PageWidth mul"
- "0")
- (bottom-right
- "0"
- "LandscapePageHeight"
- "PageWidth neg"
- "N-Up-End 1 sub LandscapePageHeight mul neg"
- "N-Up-Columns"
- "N-Up-Lines"
- "N-Up-Repeat 1 sub PageWidth mul"
- "N-Up-End 1 sub LandscapePageHeight mul neg"))
- "Alist for n-up printing initializations.
- Each element has the following form:
- (KIND XCOL YCOL XLIN YLIN REPEAT END XSTART YSTART)
- Where:
- KIND is a valid value of `ps-n-up-filling'.
- XCOL YCOL are the relative position for the next column.
- XLIN YLIN are the relative position for the beginning of next line.
- REPEAT is the number of repetitions for external loop.
- END is the number of repetitions for internal loop and also the number
- of pages in a row.
- XSTART YSTART are the relative position for the first page in a sheet.")
- (defun ps-n-up-filling ()
- (cdr (or (assq ps-n-up-filling ps-n-up-filling-database)
- (assq 'left-top ps-n-up-filling-database))))
- (defmacro ps-n-up-xcolumn (init) `(nth 0 ,init))
- (defmacro ps-n-up-ycolumn (init) `(nth 1 ,init))
- (defmacro ps-n-up-xline (init) `(nth 2 ,init))
- (defmacro ps-n-up-yline (init) `(nth 3 ,init))
- (defmacro ps-n-up-repeat (init) `(nth 4 ,init))
- (defmacro ps-n-up-end (init) `(nth 5 ,init))
- (defmacro ps-n-up-xstart (init) `(nth 6 ,init))
- (defmacro ps-n-up-ystart (init) `(nth 7 ,init))
- (defconst ps-error-handler-alist
- '((none . 0)
- (paper . 1)
- (system . 2)
- (paper-and-system . 3))
- "Alist for error handler message.")
- (defconst ps-zebra-stripe-alist
- '((follow . 1)
- (full . 2)
- (full-follow . 3))
- "Alist for zebra stripe continuation.")
- (defun ps-begin-file ()
- (setq ps-page-order 0
- ps-page-printed 0
- ps-background-text-count 0
- ps-background-image-count 0
- ps-background-pages nil
- ps-background-all-pages nil)
- (let ((dimensions (cdr (assq ps-paper-type ps-page-dimensions-database)))
- (tumble (if ps-landscape-mode (not ps-spool-tumble) ps-spool-tumble))
- (n-up (ps-n-up-printing))
- (n-up-filling (ps-n-up-filling)))
- (and ps-n-up-on (setq tumble (not tumble)))
- (ps-output
- ps-adobe-tag
- "%%Title: " (buffer-name)
-
- "\n%%Creator: ps-print v" ps-print-version
- "\n%%For: " (user-full-name)
- "\n%%CreationDate: " (format-time-string "%T %b %d %Y")
- "\n%%Orientation: "
- (if ps-landscape-mode "Landscape" "Portrait")
- "\n%%DocumentNeededResources: font Times-Roman Times-Italic\n%%+ font "
- (mapconcat 'identity
- (ps-remove-duplicates
- (append (ps-fonts 'ps-font-for-text)
- (list (ps-font 'ps-font-for-header 'normal)
- (ps-font 'ps-font-for-header 'bold)
- (ps-font 'ps-font-for-footer 'normal)
- (ps-font 'ps-font-for-footer 'bold))))
- "\n%%+ font ")
- "\n%%DocumentSuppliedResources: procset PSPrintUserDefinedPrologue-" (user-login-name) " 0 0"
- "\n%%DocumentMedia: " (ps-page-dimensions-get-media dimensions)
- (format " %d" (round (ps-page-dimensions-get-width dimensions)))
- (format " %d" (round (ps-page-dimensions-get-height dimensions)))
- " 0 () ()\n%%PageOrder: Ascend\n%%Pages: (atend)\n%%Requirements:"
- (if ps-spool-duplex
- (if tumble " duplex(tumble)\n" " duplex\n")
- "\n"))
- (ps-insert-string ps-print-prologue-header)
- (ps-output "%%EndComments\n%%BeginDefaults\n%%PageMedia: "
- (ps-page-dimensions-get-media dimensions)
- "\n%%EndDefaults\n\n%%BeginProlog\n\n"
- "/languagelevel where{pop}{/languagelevel 1 def}ifelse\n"
- (format "/ErrorMessage %s def\n\n"
- (or (cdr (assoc ps-error-handler-message
- ps-error-handler-alist))
- 1))
- ps-print-prologue-0
- "\n%%BeginResource: procset PSPrintUserDefinedPrologue-" (user-login-name) " 0 0\n\n")
- (ps-insert-string ps-user-defined-prologue)
- (ps-output "\n%%EndResource\n\n")
- (ps-output-boolean "LandscapeMode "
- (or ps-landscape-mode
- (eq (ps-n-up-landscape n-up) 'pag)))
- (ps-output-boolean "UpsideDown " ps-print-upside-down)
- (ps-output (format "/NumberOfColumns %d def\n" ps-number-of-columns)
- (format "/LandscapePageHeight %s def\n" ps-landscape-page-height)
- (format "/PrintPageWidth %s def\n"
- (- (* (+ ps-print-width ps-inter-column)
- ps-number-of-columns)
- ps-inter-column))
- (format "/PrintWidth %s def\n" ps-print-width)
- (format "/PrintHeight %s def\n" ps-print-height)
- (format "/LeftMargin %s def\n" ps-left-margin)
- (format "/RightMargin %s def\n" ps-right-margin)
- (format "/InterColumn %s def\n" ps-inter-column)
- (format "/BottomMargin %s def\n" ps-bottom-margin)
- (format "/TopMargin %s def\n" ps-top-margin)
- (format "/HeaderOffset %s def\n" ps-header-offset)
- (format "/HeaderPad %s def\n" ps-header-pad)
- (format "/FooterOffset %s def\n" ps-footer-offset)
- (format "/FooterPad %s def\n" ps-footer-pad)
- (format "/FooterLines %s def\n" ps-footer-lines))
- (ps-output-boolean "ShowNofN " ps-show-n-of-n)
- (ps-output-boolean "SwitchHeader " (if (eq ps-switch-header 'duplex)
- ps-spool-duplex
- ps-switch-header))
- (ps-output-boolean "PrintOnlyOneHeader" ps-print-only-one-header)
- (ps-output-boolean "PrintHeader " ps-print-header)
- (ps-output-boolean "PrintHeaderFrame " ps-print-header-frame)
- (ps-output-frame-properties "HeaderFrameProperties" ps-header-frame-alist)
- (ps-output-boolean "PrintFooter " ps-print-footer)
- (ps-output-boolean "PrintFooterFrame " ps-print-footer-frame)
- (ps-output-frame-properties "FooterFrameProperties" ps-footer-frame-alist)
- (let ((line-height (ps-line-height 'ps-font-for-text)))
- (ps-output (format "/LineSpacing %s def\n" ps-line-spacing-internal)
- (format "/ParagraphSpacing %s def\n"
- ps-paragraph-spacing-internal)
- (format "/LineHeight %s def\n" line-height)
- (format "/LinesPerColumn %d def\n"
- (let ((height (+ line-height
- ps-line-spacing-internal)))
- (round (/ (+ ps-print-height
- (* height 0.45))
- height))))))
- (ps-output-boolean "WarnPaperSize " ps-warn-paper-type)
- (ps-output-boolean "Zebra " ps-zebra-stripes)
- (ps-output-boolean "PrintLineNumber " ps-line-number)
- (ps-output-boolean "SyncLineZebra " (not (integerp ps-line-number-step)))
- (ps-output (format "/ZebraFollow %d def\n"
- (or (cdr (assq ps-zebra-stripe-follow
- ps-zebra-stripe-alist))
- 0))
- (format "/PrintLineStep %d def\n"
- (if (integerp ps-line-number-step)
- ps-line-number-step
- ps-zebra-stripe-height))
- (format "/PrintLineStart %d def\n" ps-line-number-start)
- "/LineNumberColor "
- (ps-format-color ps-line-number-color 0.0)
- (format "def\n/ZebraHeight %d def\n"
- ps-zebra-stripe-height)
- "/ZebraColor "
- (ps-format-color ps-zebra-color 0.95)
- "def\n")
- (ps-output "/BackgroundColor "
- (ps-format-color ps-default-background 1.0)
- "def\n")
- (ps-output "/UseSetpagedevice "
- (if (eq ps-spool-config 'setpagedevice)
- "/setpagedevice where{pop languagelevel 2 eq}{false}ifelse"
- "false")
- " def\n\n/PageWidth "
- "PrintPageWidth LeftMargin add RightMargin add def\n\n"
- (format "/N-Up %d def\n" ps-n-up-printing))
- (ps-output-boolean "N-Up-Landscape" (eq (ps-n-up-landscape n-up) t))
- (ps-output-boolean "N-Up-Border " ps-n-up-border-p)
- (ps-output (format "/N-Up-Lines %d def\n" (ps-n-up-lines n-up))
- (format "/N-Up-Columns %d def\n" (ps-n-up-columns n-up))
- (format "/N-Up-Missing %d def\n" (ps-n-up-missing n-up))
- (format "/N-Up-Margin %s def\n" ps-n-up-margin)
- "/N-Up-Repeat "
- (if ps-landscape-mode
- (ps-n-up-end n-up-filling)
- (ps-n-up-repeat n-up-filling))
- " def\n/N-Up-End "
- (if ps-landscape-mode
- (ps-n-up-repeat n-up-filling)
- (ps-n-up-end n-up-filling))
- " def\n/N-Up-XColumn " (ps-n-up-xcolumn n-up-filling)
- " def\n/N-Up-YColumn " (ps-n-up-ycolumn n-up-filling)
- " def\n/N-Up-XLine " (ps-n-up-xline n-up-filling)
- " def\n/N-Up-YLine " (ps-n-up-yline n-up-filling)
- " def\n/N-Up-XStart " (ps-n-up-xstart n-up-filling)
- " def\n/N-Up-YStart " (ps-n-up-ystart n-up-filling) " def\n")
- (ps-background-text)
- (ps-background-image)
- (setq ps-background-all-pages (nreverse ps-background-all-pages)
- ps-background-pages (nreverse ps-background-pages))
- (ps-output "\n" ps-print-prologue-1
- "\n/printGlobalBackground{\n")
- (mapc 'ps-output ps-background-all-pages)
- (ps-output
- "}def\n/printLocalBackground{\n}def\n"
- "\n%%EndProlog\n\n%%BeginSetup\n"
- "\n%%IncludeResource: font Times-Roman"
- "\n%%IncludeResource: font Times-Italic"
- "\n%%IncludeResource: font "
- (mapconcat 'identity
- (ps-remove-duplicates
- (append (ps-fonts 'ps-font-for-text)
- (list (ps-font 'ps-font-for-header 'normal)
- (ps-font 'ps-font-for-header 'bold)
- (ps-font 'ps-font-for-footer 'normal)
- (ps-font 'ps-font-for-footer 'bold))))
- "\n%%IncludeResource: font ")
-
- (format "\n/h0 %s(%s)cvn DefFont\n"
- ps-header-title-font-size-internal
- (ps-font 'ps-font-for-header 'bold))
- (format "/h1 %s(%s)cvn DefFont\n"
- ps-header-font-size-internal
- (ps-font 'ps-font-for-header 'normal))
- (format "/L0 %s(%s)cvn DefFont\n"
- (ps-get-font-size 'ps-line-number-font-size)
- ps-line-number-font)
- (format "/H0 %s(%s)cvn DefFont\n"
- ps-footer-font-size-internal
- (ps-font 'ps-font-for-footer 'normal))
- "\n\n% ---- These lines must be kept together because...
- /h0 F
- /HeaderTitleLineHeight FontHeight def
- /h1 F
- /HeaderLineHeight FontHeight def
- /HeaderDescent Descent def
- /H0 F
- /FooterLineHeight FontHeight def
- /FooterDescent Descent def
- % ---- ...because `F' has a side-effect on `FontHeight' and `Descent'\n\n")
-
- (let ((font (ps-font-alist 'ps-font-for-text))
- (i 0))
- (while font
- (ps-output (format "/f%d %s(%s)cvn DefFont\n"
- i
- ps-font-size-internal
- (ps-font 'ps-font-for-text (car (car font)))))
- (setq font (cdr font)
- i (1+ i))))
- (let ((font-entry (cdr (assq ps-font-family ps-font-info-database))))
- (ps-output (format "/SpaceWidthRatio %f def\n"
- (/ (ps-lookup 'space-width) (ps-lookup 'size)))))
- (unless (eq ps-spool-config 'lpr-switches)
- (ps-output "\n%%BeginFeature: *Duplex "
- (ps-boolean-capitalized ps-spool-duplex)
- " *Tumble "
- (ps-boolean-capitalized tumble)
- "\nUseSetpagedevice\n{BMark/Duplex "
- (ps-boolean-constant ps-spool-duplex)
- "/Tumble "
- (ps-boolean-constant tumble)
- " EMark setpagedevice}\n{statusdict begin "
- (ps-boolean-constant ps-spool-duplex)
- " setduplexmode "
- (ps-boolean-constant tumble)
- " settumble end}ifelse\n%%EndFeature\n")))
- (ps-output "\n%%BeginFeature: *ManualFeed "
- (ps-boolean-capitalized ps-manual-feed)
- "\nBMark /ManualFeed "
- (ps-boolean-constant ps-manual-feed)
- " EMark setpagedevice\n%%EndFeature\n\nBeginDoc\n%%EndSetup\n")
- (and ps-banner-page-when-duplexing
- (ps-output "\n%%Page: banner 0\nsave showpage restore\n")))
- (defun ps-format-color (color &optional default)
- (let ((the-color (if (stringp color)
- (ps-color-scale color)
- color)))
- (if (and the-color (listp the-color))
- (concat "["
- (format ps-color-format
- (* (nth 0 the-color) 1.0)
- (* (nth 1 the-color) 1.0)
- (* (nth 2 the-color) 1.0))
- "] ")
- (ps-float-format (if (numberp the-color) the-color default)))))
- (defun ps-insert-string (prologue)
- (let ((str (if (functionp prologue)
- (funcall prologue)
- prologue)))
- (and (stringp str)
- (ps-output str))))
- (defun ps-boolean-capitalized (bool)
- (if bool "True" "False"))
- (defun ps-boolean-constant (bool)
- (if bool "true" "false"))
- (defun ps-header-dirpart ()
- (let ((fname (buffer-file-name)))
- (if fname
- (if (string-equal (buffer-name) (file-name-nondirectory fname))
- (abbreviate-file-name (file-name-directory fname))
- fname)
- "")))
- (defun ps-get-buffer-name ()
- (cond
-
- ((string= (buffer-name) "ps-print.el")
- "Hey, Cool! It's ps-print.el!!!")
-
- ((string= (buffer-name) "sokoban.el")
- "Super! C'est sokoban.el!")
- (t (concat
- (and ps-printing-region-p "Subset of: ")
- (buffer-name)
- (and (buffer-modified-p) " (unsaved)")))))
- (defun ps-get-size (size mess &optional arg)
- (let ((siz (cond ((numberp size)
- size)
- ((and (consp size)
- (numberp (car size))
- (numberp (cdr size)))
- (if ps-landscape-mode
- (car size)
- (cdr size)))
- (t
- -1))))
- (and (< siz 0)
- (error "Invalid %s `%S'%s"
- mess size
- (if arg
- (format " for `%S'" arg)
- "")))
- siz))
- (defun ps-get-font-size (font-sym)
- (ps-get-size (symbol-value font-sym) "font size" font-sym))
- (defun ps-rgb-color (color unspecified default)
- (cond
-
- ((and color (listp color) (= (length color) 3)
- (let ((cl color)
- (ok t) e)
- (while (and ok cl)
- (setq e (car cl)
- cl (cdr cl)
- ok (and (floatp e) (<= 0.0 e) (<= e 1.0))))
- ok))
- color)
-
- ((and (floatp color) (<= 0.0 color) (<= color 1.0))
- (list color color color))
-
- ((and (stringp color) (not (string= color unspecified)))
- (ps-color-scale color))
-
- (t
- (list default default default))))
- (defvar ps-basic-plot-string-function 'ps-basic-plot-string)
- (defun ps-begin-job (genfunc)
-
- (or (equal ps-mark-code-directory ps-postscript-code-directory)
- (setq ps-print-prologue-0 (ps-prologue-file 0)
- ps-print-prologue-1 (ps-prologue-file 1)
- ps-mark-code-directory ps-postscript-code-directory))
-
- (let (new page)
- (while ps-selected-pages
- (setq page (car ps-selected-pages)
- ps-selected-pages (cdr ps-selected-pages))
- (cond ((integerp page)
- (and (> page 0)
- (setq new (cons (cons page page) new))))
- ((consp page)
- (and (integerp (car page)) (integerp (cdr page))
- (> (car page) 0)
- (<= (car page) (cdr page))
- (setq new (cons page new))))))
- (setq ps-selected-pages (sort new #'(lambda (one other)
- (< (car one) (car other))))
- ps-last-selected-pages ps-selected-pages
- ps-first-page nil
- ps-last-page nil))
-
- (or (listp ps-use-face-background)
- (setq ps-use-face-background t))
-
- (and (integerp ps-line-number-step)
- (<= ps-line-number-step 0)
- (setq ps-line-number-step 1))
- (setq ps-n-up-on (> ps-n-up-printing 1)
- ps-line-number-start (max 1 (min ps-line-number-start
- (if (integerp ps-line-number-step)
- ps-line-number-step
- ps-zebra-stripe-height))))
-
- (with-current-buffer ps-spool-buffer
- (goto-char (point-max))
- (and (re-search-backward "^%%Trailer$" nil t)
- (delete-region (match-beginning 0) (point-max))))
-
- (setq ps-zebra-stripe-full-p (memq ps-zebra-stripe-follow
- '(full full-follow))
- ps-page-postscript 0
- ps-page-sheet 0
- ps-page-n-up 0
- ps-page-column 0
- ps-lines-printed 0
- ps-print-page-p t
- ps-showline-count (car ps-printing-region)
- ps-line-spacing-internal (ps-get-size ps-line-spacing
- "line spacing")
- ps-paragraph-spacing-internal (ps-get-size ps-paragraph-spacing
- "paragraph spacing")
- ps-font-size-internal (ps-get-font-size 'ps-font-size)
- ps-header-font-size-internal (ps-get-font-size 'ps-header-font-size)
- ps-header-title-font-size-internal
- (ps-get-font-size 'ps-header-title-font-size)
- ps-footer-font-size-internal (ps-get-font-size 'ps-footer-font-size)
- ps-control-or-escape-regexp
- (cond ((eq ps-print-control-characters '8-bit)
- (string-as-unibyte "[\000-\037\177-\377]"))
- ((eq ps-print-control-characters 'control-8-bit)
- (string-as-unibyte "[\000-\037\177-\237]"))
- ((eq ps-print-control-characters 'control)
- "[\000-\037\177]")
- (t "[\t\n\f]"))
-
-
-
- ps-color-p (and ps-print-color-p (ps-color-device))
- ps-print-color-scale (if ps-color-p
- (float (car (ps-color-values "white")))
- 1.0)
- ps-default-background (ps-rgb-color
- (cond
- ((or (member ps-print-color-p
- '(nil back-white))
- (eq genfunc 'ps-generate-postscript))
- nil)
- ((eq ps-default-bg 'frame-parameter)
- (ps-frame-parameter nil 'background-color))
- ((eq ps-default-bg t)
- (ps-face-background-name 'default))
- (t
- ps-default-bg))
- "unspecified-bg"
- 1.0)
- ps-default-foreground (ps-rgb-color
- (cond
- ((or (member ps-print-color-p
- '(nil back-white))
- (eq genfunc 'ps-generate-postscript))
- nil)
- ((eq ps-default-fg 'frame-parameter)
- (ps-frame-parameter nil 'foreground-color))
- ((eq ps-default-fg t)
- (ps-face-foreground-name 'default))
- (t
- ps-default-fg))
- "unspecified-fg"
- 0.0)
- ps-foreground-list (mapcar
- #'(lambda (arg)
- (ps-rgb-color arg "unspecified-fg" 0.0))
- (append (and (not (member ps-print-color-p
- '(nil back-white)))
- ps-fg-list)
- (list ps-default-foreground
- "black")))
- ps-default-color (and (not (member ps-print-color-p
- '(nil back-white)))
- ps-default-foreground)
- ps-current-color ps-default-color
-
-
- ps-basic-plot-string-function 'ps-basic-plot-string
- ps-encode-header-string-function nil)
-
- (ps-get-page-dimensions)
-
- (unless (listp ps-lpr-switches)
- (error "`ps-lpr-switches' value should be a list"))
- (and ps-color-p
- (equal ps-default-background ps-default-foreground)
- (error
- (concat
- "`ps-default-fg' and `ps-default-bg' have the same color.\n"
- "Text won't appear on page. Please, check these variables."))))
- (defun ps-page-number ()
- (if ps-print-only-one-header
- (1+ (/ (1- ps-page-column) ps-number-of-columns))
- ps-page-column))
- (defsubst ps-end-page ()
- (ps-output "EndPage\nEndDSCPage\n"))
- (defsubst ps-next-page ()
- (ps-end-page)
- (ps-flush-output)
- (ps-begin-page))
- (defun ps-end-sheet ()
- (and ps-print-page-p (> ps-page-sheet 0)
- (ps-output "EndSheet\n")))
- (defun ps-header-sheet ()
-
- (ps-end-sheet)
- (setq ps-page-sheet (1+ ps-page-sheet))
- (when (ps-print-sheet-p)
- (setq ps-page-order (1+ ps-page-order))
- (ps-output (if ps-n-up-on
- (format "\n%%%%Page: (%d \\(%d\\)) %d\n"
- ps-page-order ps-page-postscript ps-page-order)
- (format "\n%%%%Page: %d %d\n"
- ps-page-postscript ps-page-order))
-
- "/Lines 0 def\n/PageCount 0 def\n"
- (format "%d BeginSheet\nBeginDSCPage\n"
- ps-n-up-printing))))
- (defun ps-header-page ()
-
-
- (if (zerop (mod ps-page-column ps-number-of-columns))
- (progn
- (setq ps-page-postscript (1+ ps-page-postscript))
- (when (ps-print-page-p)
- (ps-print-sheet-p)
- (if (zerop (mod ps-page-n-up ps-n-up-printing))
-
- (progn
- (ps-header-sheet)
- (run-hooks 'ps-print-begin-sheet-hook))
-
- (ps-output "BeginDSCPage\n")
- (run-hooks 'ps-print-begin-page-hook))
- (ps-background ps-page-postscript)
- (setq ps-page-n-up (1+ ps-page-n-up))
- (and ps-print-page-p
- (setq ps-page-printed (1+ ps-page-printed)))))
-
- (ps-output "BeginDSCPage\n")
- (run-hooks 'ps-print-begin-column-hook))
- (setq ps-page-column (1+ ps-page-column)))
- (defun ps-begin-page ()
- (setq ps-width-remaining ps-print-width
- ps-height-remaining ps-print-height)
- (ps-header-page)
- (ps-output (format "/LineNumber %d def\n" ps-showline-count)
- (format "/PageNumber %d def\n" (ps-page-number)))
- (when ps-print-header
- (ps-generate-header "HeaderLinesLeft" "/h0" "/h1" ps-left-header)
- (ps-generate-header "HeaderLinesRight" "/h0" "/h1" ps-right-header)
- (ps-output (format "%d SetHeaderLines\n" ps-header-lines)))
- (when ps-print-footer
- (ps-generate-header "FooterLinesLeft" "/H0" "/H0" ps-left-footer)
- (ps-generate-header "FooterLinesRight" "/H0" "/H0" ps-right-footer)
- (ps-output (format "%d SetFooterLines\n" ps-footer-lines)))
- (ps-output (number-to-string ps-lines-printed) " BeginPage\n")
- (ps-set-font ps-current-font)
- (ps-set-bg ps-current-bg)
- (ps-set-color ps-current-color))
- (defsubst ps-skip-newline (limit)
- (setq ps-showline-count (1+ ps-showline-count)
- ps-lines-printed (1+ ps-lines-printed))
- (and (< (point) limit)
- (forward-char 1)))
- (defsubst ps-next-line ()
- (setq ps-showline-count (1+ ps-showline-count)
- ps-lines-printed (1+ ps-lines-printed))
- (let* ((paragraph-p (and ps-paragraph-regexp
- (looking-at ps-paragraph-regexp)))
- (lh (+ (ps-line-height 'ps-font-for-text)
- (if paragraph-p
- ps-paragraph-spacing-internal
- ps-line-spacing-internal))))
- (if (< ps-height-remaining lh)
- (ps-next-page)
- (setq ps-width-remaining ps-print-width
- ps-height-remaining (- ps-height-remaining lh))
- (ps-output (if paragraph-p "PHL\n" "LHL\n")))))
- (defun ps-continue-line ()
- (setq ps-lines-printed (1+ ps-lines-printed))
- (let ((lh (+ (ps-line-height 'ps-font-for-text) ps-line-spacing-internal)))
- (if (< ps-height-remaining lh)
- (ps-next-page)
- (setq ps-width-remaining ps-print-width
- ps-height-remaining (- ps-height-remaining lh))
- (ps-output "SL\n"))))
- (defun ps-find-wrappoint (from to char-width)
- (let ((avail (truncate (/ ps-width-remaining char-width)))
- (todo (- to from)))
- (if (< todo avail)
- (cons to (* todo char-width))
- (cons (+ from avail) ps-width-remaining))))
- (defun ps-basic-plot-str (from to string)
- (let* ((wrappoint (ps-find-wrappoint from to
- (ps-avg-char-width 'ps-font-for-text)))
- (to (car wrappoint))
- (str (substring string from to)))
- (ps-output-string str)
- (ps-output " S\n")
- wrappoint))
- (defun ps-basic-plot-string (from to &optional _bg-color)
- (let* ((wrappoint (ps-find-wrappoint from to
- (ps-avg-char-width 'ps-font-for-text)))
- (to (car wrappoint))
- (string (buffer-substring-no-properties from to)))
- (ps-output-string string)
- (ps-output " S\n")
- wrappoint))
- (defun ps-basic-plot-whitespace (from to &optional _bg-color)
- (let* ((wrappoint (ps-find-wrappoint from to
- (ps-space-width 'ps-font-for-text)))
- (to (car wrappoint)))
- (ps-output (format "%d W\n" (- to from)))
- wrappoint))
- (defun ps-plot (plotfunc from to &optional bg-color)
- (while (< from to)
- (let* ((wrappoint (funcall plotfunc from to bg-color))
- (plotted-to (car wrappoint))
- (plotted-width (cdr wrappoint)))
- (setq from plotted-to
- ps-width-remaining (- ps-width-remaining plotted-width))
- (if (< from to)
- (ps-continue-line))))
- (if ps-razzle-dazzle
- (let* ((q-todo (- (point-max) (point-min)))
- (q-done (- (point) (point-min)))
- (chunkfrac (/ q-todo 8))
- (chunksize (min chunkfrac 1000)))
- (if (> (- q-done ps-razchunk) chunksize)
- (progn
- (setq ps-razchunk q-done)
- (message "Formatting...%3d%%"
- (if (< q-todo 100)
- (/ (* 100 q-done) q-todo)
- (/ q-done (/ q-todo 100)))
- ))))))
- (defvar ps-last-font nil)
- (defun ps-set-font (font)
- (setq ps-last-font (format "f%d" (setq ps-current-font font)))
- (ps-output (format "/%s F\n" ps-last-font)))
- (defun ps-set-bg (color)
- (if (setq ps-current-bg color)
- (ps-output (format ps-color-format
- (nth 0 color) (nth 1 color) (nth 2 color))
- " true BG\n")
- (ps-output "false BG\n")))
- (defun ps-set-color (color)
- (setq ps-current-color (or color ps-default-foreground))
- (ps-output (format ps-color-format
- (nth 0 ps-current-color)
- (nth 1 ps-current-color) (nth 2 ps-current-color))
- " FG\n"))
- (defsubst ps-plot-string (string)
- (ps-plot 'ps-basic-plot-str 0 (length string) string))
- (defvar ps-current-effect 0)
- (defvar ps-print-translation-table
- (let ((tbl (make-char-table 'translation-table nil)))
- (if (and (boundp 'ucs-mule-8859-to-mule-unicode)
- (char-table-p ucs-mule-8859-to-mule-unicode))
- (map-char-table
- #'(lambda (k v)
- (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v))
- (aset tbl k v)))
- ucs-mule-8859-to-mule-unicode))
- tbl)
- "Translation table for PostScript printing.
- The default value is a table that translates non-Latin-1 Latin characters
- to the equivalent Latin-1 characters.")
- (defun ps-plot-region (from to font &optional fg-color bg-color effects)
- (or (equal font ps-current-font)
- (ps-set-font font))
-
-
-
-
- (let ((fg (or fg-color ps-default-foreground)))
- (if ps-fg-validate-p
- (let ((bg (or bg-color ps-default-background))
- (el ps-foreground-list))
- (while (and el (equal fg bg))
- (setq fg (car el)
- el (cdr el)))))
- (or (equal fg ps-current-color)
- (ps-set-color fg)))
- (or (equal bg-color ps-current-bg)
- (ps-set-bg bg-color))
-
- (cond
- ((not (integerp effects))
- (ps-output "0 EF\n")
- (setq ps-current-effect 0))
- ((/= effects ps-current-effect)
- (ps-output (number-to-string effects) " EF\n")
- (setq ps-current-effect effects)))
-
- (save-excursion
- (goto-char from)
-
-
- (while (< from to)
-
- (and ps-begin-cut-regexp ps-end-cut-regexp
- (looking-at ps-begin-cut-regexp)
- (progn
- (goto-char (match-end 0))
- (and (re-search-forward ps-end-cut-regexp to 'noerror)
- (= (following-char) ?\n)
- (forward-char 1))
- (setq from (point))))
- (if (re-search-forward ps-control-or-escape-regexp to t)
-
- (let* ((match-point (match-beginning 0))
- (match (char-after match-point)))
- (when (< from match-point)
- (ps-plot ps-basic-plot-string-function
- from match-point bg-color))
- (cond
- ((= match ?\t)
- (let ((linestart (line-beginning-position)))
- (forward-char -1)
- (setq from (+ linestart (current-column)))
- (when (re-search-forward "[ \t]+" to t)
- (ps-plot 'ps-basic-plot-whitespace
- from (+ linestart (current-column))
- bg-color))))
- ((= match ?\n)
- (if (looking-at "\f[^\n]")
-
- (progn
- (ps-skip-newline to)
- (ps-next-page))
-
-
- (ps-next-line)))
- ((= match ?\f)
-
-
- (unless (and (equal (char-after (1- match-point)) ?\n)
- (= ps-height-remaining ps-print-height))
-
- (and (equal (following-char) ?\n)
- (ps-skip-newline to))
- (ps-next-page)))
- (t
- (ps-control-character match)))
- (setq from (point)))
-
- (ps-plot ps-basic-plot-string-function from to bg-color)
- (setq from to)))))
- (defvar ps-string-control-codes
- (let ((table (make-vector 256 nil))
- (char ?\000))
-
- (while (<= char ?\037)
- (aset table char (format "^%c" (+ char ?@)))
- (setq char (1+ char)))
-
- (while (< char ?\177)
- (aset table char (format "%c" char))
- (setq char (1+ char)))
-
- (aset table char "^?")
-
- (while (<= (setq char (1+ char)) ?\377)
- (aset table char (format "\\%o" char)))
- table)
- "Vector used to map characters to a printable string.")
- (defun ps-control-character (char)
- (let* ((str (aref ps-string-control-codes char))
- (from (1- (point)))
- (len (length str))
- (to (+ from len))
- (char-width (ps-avg-char-width 'ps-font-for-text))
- (wrappoint (ps-find-wrappoint from to char-width)))
- (if (< (car wrappoint) to)
- (ps-continue-line))
- (setq ps-width-remaining (- ps-width-remaining (* len char-width)))
- (ps-output-string str)
- (ps-output " S\n")))
- (defsubst ps-face-foreground-color-p (attr)
- (memq attr '(foreground-color :foreground)))
- (defsubst ps-face-background-color-p (attr)
- (memq attr '(background-color :background)))
- (defsubst ps-face-color-p (attr)
- (memq attr '(foreground-color :foreground background-color :background)))
- (defun ps-face-extract-color (face-attrs)
- (let ((color (cdr face-attrs)))
- (if (listp color)
- (car color)
- color)))
- (defun ps-face-attributes (face)
- "Return face attribute vector.
- If FACE is not in `ps-print-face-extension-alist' or in
- `ps-print-face-alist', insert it on `ps-print-face-alist' and
- return the attribute vector.
- If FACE is not a valid face name, use default face."
- (and (stringp face) (facep face) (setq face (intern face)))
- (cond
- (ps-black-white-faces-alist
- (or (and (symbolp face)
- (cdr (assq face ps-black-white-faces-alist)))
- (vector 0 nil nil)))
- ((symbolp face)
- (cdr (or (assq face ps-print-face-extension-alist)
- (assq face ps-print-face-alist)
- (let* ((the-face (if (facep face) face 'default))
- (new-face (ps-screen-to-bit-face the-face)))
- (or (and (eq the-face 'default)
- (assq the-face ps-print-face-alist))
- (setq ps-print-face-alist
- (cons new-face ps-print-face-alist)))
- new-face))))
- ((ps-face-foreground-color-p (car face))
- (vector 0 (ps-face-extract-color face) nil))
- ((ps-face-background-color-p (car face))
- (vector 0 nil (ps-face-extract-color face)))
- (t
- (vector 0 nil nil))))
- (defun ps-face-background (face background)
- (and (cond ((eq ps-use-face-background t))
- ((null ps-use-face-background) nil)
-
- ((symbolp face)
- (memq face ps-use-face-background))
- ((listp face)
- (or (ps-face-color-p (car face))
- (let (ok)
- (while face
- (if (or (memq (car face) ps-use-face-background)
- (ps-face-color-p (car face)))
- (setq face nil
- ok t)
- (setq face (cdr face))))
- ok)))
- (t
- nil)
- )
- background))
- (defun ps-face-attribute-list (face-or-list)
- (cond
-
- ((not (listp face-or-list))
- (ps-face-attributes face-or-list))
-
- ((ps-face-foreground-color-p (car face-or-list))
- (vector 0 (ps-face-extract-color face-or-list) nil))
-
- ((ps-face-background-color-p (car face-or-list))
- (vector 0 nil (ps-face-extract-color face-or-list)))
-
- (t
- (let ((effects 0)
- foreground background face-attr face)
- (while face-or-list
- (setq face (car face-or-list)
- face-or-list (cdr face-or-list)
- face-attr (ps-face-attributes face)
- effects (logior effects (aref face-attr 0)))
- (or foreground (setq foreground (aref face-attr 1)))
- (or background
- (setq background (ps-face-background face (aref face-attr 2)))))
- (vector effects foreground background)))))
- (defconst ps-font-type (vector nil 'bold 'italic 'bold-italic))
- (defun ps-plot-with-face (from to face)
- (cond
- ((null face)
- (ps-plot-region from to 0))
- ((eq face 'emacs--invisible--face))
- (t
- (let* ((face-bit (ps-face-attribute-list face))
- (effect (aref face-bit 0))
- (foreground (aref face-bit 1))
- (background (ps-face-background face (aref face-bit 2)))
- (fg-color (if (and ps-color-p foreground)
- (ps-color-scale foreground)
- ps-default-color))
- (bg-color (and ps-color-p background
- (ps-color-scale background))))
- (ps-plot-region
- from to
- (ps-font-number 'ps-font-for-text
- (or (aref ps-font-type (logand effect 3))
- face))
- fg-color bg-color (lsh effect -2)))))
- (goto-char to))
- (or (fboundp 'face-list) (defalias 'face-list 'list-faces))
- (defun ps-build-reference-face-lists ()
-
-
- (ps-font-lock-face-attributes)
-
- (setq ps-print-face-alist nil)
- (if ps-auto-font-detect
- (mapc 'ps-map-face (face-list))
- (mapc 'ps-set-face-bold ps-bold-faces)
- (mapc 'ps-set-face-italic ps-italic-faces)
- (mapc 'ps-set-face-underline ps-underlined-faces))
- (setq ps-build-face-reference nil))
- (defun ps-set-face-bold (face)
- (ps-set-face-attribute face 1))
- (defun ps-set-face-italic (face)
- (ps-set-face-attribute face 2))
- (defun ps-set-face-underline (face)
- (ps-set-face-attribute face 4))
- (defun ps-set-face-attribute (face effect)
- (let ((face-bit (cdr (ps-map-face face))))
- (aset face-bit 0 (logior (aref face-bit 0) effect))))
- (defun ps-map-face (face)
- (let* ((face-map (ps-screen-to-bit-face face))
- (ps-face-bit (cdr (assq (car face-map) ps-print-face-alist))))
- (if ps-face-bit
-
- (let ((face-bit (cdr face-map)))
- (aset ps-face-bit 0 (logior (aref ps-face-bit 0) (aref face-bit 0)))
- (or (aref ps-face-bit 1) (aset ps-face-bit 1 (aref face-bit 1)))
- (or (aref ps-face-bit 2) (aset ps-face-bit 2 (aref face-bit 2))))
-
- (setq ps-print-face-alist (cons face-map ps-print-face-alist)))
- face-map))
- (defun ps-screen-to-bit-face (face)
- (cons face
- (vector (logior (if (ps-face-bold-p face) 1 0)
- (if (ps-face-italic-p face) 2 0)
- (if (ps-face-underlined-p face) 4 0)
- (if (ps-face-strikeout-p face) 8 0)
- (if (ps-face-overline-p face) 16 0)
- (if (ps-face-box-p face) 64 0))
- (ps-face-foreground-name face)
- (ps-face-background-name face))))
- (declare-function jit-lock-fontify-now "jit-lock" (&optional start end))
- (declare-function lazy-lock-fontify-region "lazy-lock" (beg end))
- (defun ps-print-ensure-fontified (start end)
- (cond ((and (boundp 'jit-lock-mode) (symbol-value 'jit-lock-mode))
- (jit-lock-fontify-now start end))
- ((and (boundp 'lazy-lock-mode) (symbol-value 'lazy-lock-mode))
- (lazy-lock-fontify-region start end))))
- (defun ps-generate-postscript-with-faces (from to)
-
- (setq ps-current-effect 0)
-
- (when (or ps-always-build-face-reference
- ps-build-face-reference)
- (message "Collecting face information...")
- (ps-build-reference-face-lists))
-
- (setq ps-black-white-faces-alist nil)
- (and (eq ps-print-color-p 'black-white)
- (ps-extend-face-list ps-black-white-faces nil
- 'ps-black-white-faces-alist))
-
- (save-restriction
- (narrow-to-region from to)
- (ps-print-ensure-fontified from to)
- (ps-generate-postscript-with-faces1 from to)))
- (defun ps-generate-postscript (from to)
- (ps-plot-region from to 0))
- (declare-function ps-mule-initialize "ps-mule" ())
- (declare-function ps-mule-begin-job "ps-mule" (from to))
- (declare-function ps-mule-end-job "ps-mule" ())
- (defun ps-generate (buffer from to genfunc)
- (save-excursion
- (let ((from (min to from))
- (to (max to from))
-
-
- (inhibit-read-only t))
- (save-restriction
- (narrow-to-region from to)
- (and ps-razzle-dazzle
- (message "Formatting...%3d%%" (setq ps-razchunk 0)))
- (setq ps-source-buffer buffer
- ps-spool-buffer (get-buffer-create ps-spool-buffer-name))
- (ps-init-output-queue)
- (let (safe-marker completed-safely needs-begin-file)
- (unwind-protect
- (progn
- (set-buffer ps-spool-buffer)
- (set-buffer-multibyte nil)
-
-
-
- (setq safe-marker (make-marker))
- (set-marker safe-marker (point-max))
- (goto-char (point-min))
- (or (looking-at (regexp-quote ps-adobe-tag))
- (setq needs-begin-file t))
- (set-buffer ps-source-buffer)
- (save-excursion
- (let ((ps-print-page-p t)
- ps-even-or-odd-pages)
- (ps-begin-job genfunc)
- (when needs-begin-file
- (ps-begin-file)
- (ps-mule-initialize))
- (ps-mule-begin-job from to)
- (ps-selected-pages)))
- (ps-begin-page)
- (funcall genfunc from to)
- (ps-end-page)
- (ps-mule-end-job)
- (ps-end-job needs-begin-file)
-
-
- (setq completed-safely t))
-
-
-
-
- (and (markerp safe-marker) (not completed-safely)
- (progn
- (set-buffer ps-spool-buffer)
- (delete-region (marker-position safe-marker) (point-max))))))
- (and ps-razzle-dazzle (message "Formatting...done"))))))
- (defun ps-end-job (needs-begin-file)
- (let ((ps-print-page-p t))
- (ps-flush-output)
- (save-excursion
- (let ((pages-per-sheet (mod ps-page-printed ps-n-up-printing))
- (total-lines (cdr ps-printing-region))
- (total-pages (ps-page-number)))
- (set-buffer ps-spool-buffer)
- (let (case-fold-search)
-
- (goto-char (point-max))
- (and (> pages-per-sheet 0)
- (re-search-backward "^[0-9]+ BeginSheet$" nil t)
- (replace-match (format "%d BeginSheet" pages-per-sheet) t))
-
- (goto-char (point-min))
- (while (re-search-forward "^/Lines 0 def\n/PageCount 0 def$" nil t)
- (replace-match (format "/Lines %d def\n/PageCount %d def"
- total-lines total-pages) t)))))
-
- (and ps-spool-duplex (= (mod ps-page-order 2) 1)
- (let ((ps-n-up-printing 0))
- (ps-header-sheet)
- (ps-output "/PrintHeader false def\n/ColumnIndex 0 def\n"
- "/PrintLineNumber false def\n"
- (number-to-string ps-lines-printed) " BeginPage\n")
- (ps-end-page)))
-
- (ps-end-sheet)
- (ps-output "\n%%Trailer\n%%Pages: "
- (number-to-string
- (if (and needs-begin-file
- ps-banner-page-when-duplexing)
- (1+ ps-page-order)
- ps-page-order))
- "\n\nEndDoc\n\n%%EOF\n")
- (and ps-end-with-control-d
- (ps-output "\C-d"))
- (ps-flush-output))
-
- (setq ps-selected-pages nil))
- (defun ps-do-despool (filename)
- (if (or (not (boundp 'ps-spool-buffer))
- (not (symbol-value 'ps-spool-buffer)))
- (message "No spooled PostScript to print")
- (if filename
- (save-excursion
- (and ps-razzle-dazzle (message "Saving..."))
- (set-buffer ps-spool-buffer)
- (setq filename (expand-file-name filename))
- (let ((coding-system-for-write 'raw-text-unix))
- (write-region (point-min) (point-max) filename))
- (and ps-razzle-dazzle (message "Wrote %s" filename)))
-
- (and ps-razzle-dazzle (message "Printing..."))
- (with-current-buffer ps-spool-buffer
- (let* ((coding-system-for-write 'raw-text-unix)
- (ps-printer-name (or ps-printer-name
- (and (boundp 'printer-name)
- (symbol-value 'printer-name))))
- (ps-lpr-switches
- (append ps-lpr-switches
- (and (stringp ps-printer-name)
- (string< "" ps-printer-name)
- (list (concat
- (and (stringp ps-printer-name-option)
- ps-printer-name-option)
- ps-printer-name))))))
- (or (stringp ps-printer-name)
- (setq ps-printer-name nil))
- (apply (or ps-print-region-function 'call-process-region)
- (point-min) (point-max) ps-lpr-command nil
- (and (fboundp 'start-process) 0)
- nil
- (ps-flatten-list
- (ps-string-list
- (mapcar 'ps-eval-switch ps-lpr-switches))))))
- (and ps-razzle-dazzle (message "Printing...done")))
- (kill-buffer ps-spool-buffer)))
- (defun ps-string-list (arg)
- (let (lstr)
- (dolist (elm arg)
- (cond ((stringp elm)
- (setq lstr (cons elm lstr)))
- ((listp elm)
- (let ((s (ps-string-list elm)))
- (when s
- (setq lstr (cons s lstr)))))
- (t )))
- (nreverse lstr)))
- (defun ps-eval-switch (arg)
- (cond ((stringp arg) arg)
- ((functionp arg) (apply arg nil))
- ((symbolp arg) (symbol-value arg))
- ((consp arg) (apply (car arg) (cdr arg)))
- (t nil)))
- (defun ps-flatten-list (&rest list)
- (ps-flatten-list-1 list))
- (defun ps-flatten-list-1 (list)
- (cond ((null list) nil)
- ((consp list) (append (ps-flatten-list-1 (car list))
- (ps-flatten-list-1 (cdr list))))
- (t (list list))))
- (defun ps-kill-emacs-check ()
- (let (ps-buffer)
- (and (setq ps-buffer (get-buffer ps-spool-buffer-name))
- (buffer-name ps-buffer)
- (buffer-modified-p ps-buffer)
- (y-or-n-p "Unprinted PostScript waiting; print now? ")
- (ps-despool))
- (and (setq ps-buffer (get-buffer ps-spool-buffer-name))
- (buffer-name ps-buffer)
- (buffer-modified-p ps-buffer)
- (not (yes-or-no-p "Unprinted PostScript waiting; exit anyway? "))
- (error "Unprinted PostScript"))))
- (cond ((fboundp 'add-hook)
- (unless noninteractive
- (funcall 'add-hook 'kill-emacs-hook 'ps-kill-emacs-check)))
- (kill-emacs-hook
- (message "Won't override existing `kill-emacs-hook'"))
- (t
- (setq kill-emacs-hook 'ps-kill-emacs-check)))
- (defvar ps-multibyte-buffer nil "\
- Specifies the multi-byte buffer handling.
- Valid values are:
- nil This is the value to use the default settings;
- by default, this only works to print buffers with
- only ASCII and Latin characters. But this default
- setting can be changed by setting the variable
- `ps-mule-font-info-database-default' differently.
- The initial value of this variable is
- `ps-mule-font-info-database-latin' (see
- documentation).
- `non-latin-printer' This is the value to use when you have a Japanese
- or Korean PostScript printer and want to print
- buffer with ASCII, Latin-1, Japanese (JISX0208 and
- JISX0201-Kana) and Korean characters. At present,
- it was not tested with the Korean characters
- printing. If you have a korean PostScript printer,
- please, test it.
- `bdf-font' This is the value to use when you want to print
- buffer with BDF fonts. BDF fonts include both latin
- and non-latin fonts. BDF (Bitmap Distribution
- Format) is a format used for distributing X's font
- source file. BDF fonts are included in
- `intlfonts-1.2' which is a collection of X11 fonts
- for all characters supported by Emacs. In order to
- use this value, be sure to have installed
- `intlfonts-1.2' and set the variable
- `bdf-directory-list' appropriately (see ps-bdf.el for
- documentation of this variable).
- `bdf-font-except-latin' This is like `bdf-font' except that it uses
- PostScript default fonts to print ASCII and Latin-1
- characters. This is convenient when you want or
- need to use both latin and non-latin characters on
- the same buffer. See `ps-font-family',
- `ps-header-font-family' and `ps-font-info-database'.
- Any other value is treated as nil.")
- (custom-autoload 'ps-multibyte-buffer "ps-mule" t)
- (autoload 'ps-mule-initialize "ps-mule" "\
- Initialize global data for printing multi-byte characters.
- \(fn)" nil nil)
- (autoload 'ps-mule-begin-job "ps-mule" "\
- Start printing job for multi-byte chars between FROM and TO.
- It checks if all multi-byte characters in the region are printable or not.
- \(fn FROM TO)" nil nil)
- (autoload 'ps-mule-end-job "ps-mule" "\
- Finish printing job for multi-byte chars.
- \(fn)" nil nil)
- (provide 'ps-print)
|