X Tutup
Class { #name : #GRPrinter, #superclass : #GRObject, #category : #'Grease-Core-Text' } { #category : #'parts-date' } GRPrinter class >> abbreviatedMonthName [ ^ self monthName: #('Jan' 'Feb' 'Mar' 'Apr' 'May' 'Jun' 'Jul' 'Aug' 'Sep' 'Oct' 'Nov' 'Dec') ] { #category : #'parts-date' } GRPrinter class >> abbreviatedWeekName [ ^ self weekName: #('Sun' 'Mon' 'Tue' 'Wed' 'Thu' 'Fri' 'Sat') ] { #category : #'parts-date' } GRPrinter class >> absOffsetHoursPadded [ ^ GRMappedPrinter block: [ :date | date offset hours abs ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-date' } GRPrinter class >> absOffsetMinutesPadded [ ^ GRMappedPrinter block: [ :date | date offset minutes abs ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-units' } GRPrinter class >> binaryFileSize [ ^ GRUnitPrinter base: 1024 units: #('byte' 'bytes' 'KiB' 'MiB' 'GiB' 'TiB' 'PiB' 'EiB' 'ZiB' 'YiB') ] { #category : #'factory-http' } GRPrinter class >> cookieTimestamp [ "Netscape's original proposal defined an Expires header that took a date value in a fixed-length variant format in place of Max-Age: Wdy, DD-Mon-YY HH:MM:SS GMT" ^ GRMappedPrinter block: [ :timestamp | timestamp asUTC ] next: self abbreviatedWeekName , ', ' , self paddedDay , '-' , self abbreviatedMonthName , '-' , self paddedYear , ' ' , self isoTime , ' GMT' ] { #category : #'parts-units' } GRPrinter class >> decimalFileSize [ ^ GRUnitPrinter base: 1000 units: #('byte' 'bytes' 'kB' 'MB' 'GB' 'TB' 'PB' 'EB' 'ZB' 'YB') ] { #category : #'parts-date' } GRPrinter class >> fullMonthName [ ^ self monthName: #('January' 'February' 'March' 'April' 'May' 'June' 'July' 'August' 'September' 'October' 'November' 'December') ] { #category : #'parts-date' } GRPrinter class >> fullWeekName [ ^ self weekName: #('Sunday' 'Monday' 'Tuesday' 'Wednesday' 'Thursday' 'Friday' 'Saturday') ] { #category : #'factory-http' } GRPrinter class >> httpDate [ "Answers a printer that formats dates for HTTP1.1 (RFC 2616)" ^ self rfc1123 ] { #category : #'factory-http' } GRPrinter class >> isoDate [ "Ansers a printer that formats dates according to ISO(YYYY-MM-DD) E.g. 2003-12-24" ^ self paddedYear , $- , self paddedMonth , $- , self paddedDay ] { #category : #'factory-http' } GRPrinter class >> isoTime [ "Ansers a printer that formats time according to ISO(HH:MM:SS) E.g. 12:23:34" ^ self paddedHour24 , $: , self paddedMinute , $: , self paddedSecond ] { #category : #'parts-date' } GRPrinter class >> monthName: anArray [ ^ GRPluggablePrinter on: [ :date | anArray at: date monthIndex ] ] { #category : #'parts-units' } GRPrinter class >> numberWithAtLeastDigits: anInteger [ ^ GRNumberPrinter new padding: $0; digits: anInteger; yourself ] { #category : #'parts-date' } GRPrinter class >> offsetSign [ ^ GRMappedPrinter block: [ :date | date offset ] next: (GRSignPrinter new positivePrinter: $+; negativePrinter: $-; yourself) ] { #category : #'parts-date' } GRPrinter class >> paddedCentury [ ^ GRMappedPrinter block: [ :date | date year \\ 100 ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-date' } GRPrinter class >> paddedDay [ ^ GRMappedPrinter block: [ :date | date dayOfMonth ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-time' } GRPrinter class >> paddedHour12 [ ^ GRMappedPrinter block: [ :time | (time hour - 1) \\ 12 + 1 ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-time' } GRPrinter class >> paddedHour24 [ ^ GRMappedPrinter block: [ :time | time hour ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-time' } GRPrinter class >> paddedMinute [ ^ GRMappedPrinter block: [ :time | time minute ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-date' } GRPrinter class >> paddedMonth [ ^ GRMappedPrinter block: [ :date | date monthIndex ] next: (self numberWithAtLeastDigits: 2) ] { #category : #'parts-time' } GRPrinter class >> paddedSecond [ ^ GRMappedPrinter block: [ :time | time second ] next: (GRNumberPrinter new padding: $0; digits: 2) ] { #category : #'parts-date' } GRPrinter class >> paddedYear [ ^ GRMappedPrinter block: [ :date | date year ] next: (self numberWithAtLeastDigits: 4) ] { #category : #'factory-http' } GRPrinter class >> rfc1123 [ "Answers a printer that formats dates for HTTP1.1 (RFC 1123). Eg. Sun, 06 Nov 1994 08:49:37 GMT " ^ GRMappedPrinter block: [ :date | "For the purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal Time)" date asUTC ] next: GRSequentialPrinter new , self abbreviatedWeekName , ', ' , self paddedDay , Character space , self abbreviatedMonthName , Character space , self paddedYear , Character space , self isoTime , ' GMT' ] { #category : #'factory-http' } GRPrinter class >> rfc822 [ "Answers a printer that formats dates according to RFC 822 (email). Eg. Sun, 31 Aug 2008 19:41:46 +0200" ^ self abbreviatedWeekName , ', ' , self paddedDay , Character space , self abbreviatedMonthName , Character space , self paddedYear , Character space , self isoTime , Character space , self offsetSign , self absOffsetHoursPadded , self absOffsetMinutesPadded ] { #category : #'factory-http' } GRPrinter class >> rfc822WithTimeZone: aString [ "Answers a privter that formats dates according to RFC 822 (email) with the given time zone String. Eg. Sun, 31 Aug 2008 19:41:46 " ^ self abbreviatedWeekName , ', ' , self paddedDay , Character space , self abbreviatedMonthName , Character space , self paddedYear , Character space , self isoTime , Character space , aString ] { #category : #'factory-currency' } GRPrinter class >> swissCurrency [ ^ GRSequentialPrinter new , 'CHF ' , GRSignPrinter new , (GRNumberPrinter new separator: $'; precision: 2; accuracy: 0.05; yourself) ] { #category : #'parts-date' } GRPrinter class >> unpaddedCentury [ ^ GRMappedPrinter block: [ :date | date year \\ 100 ] next: GRNumberPrinter new ] { #category : #'parts-date' } GRPrinter class >> unpaddedDay [ ^ GRMappedPrinter block: [ :date | date dayOfMonth ] next: GRNumberPrinter new ] { #category : #'parts-time' } GRPrinter class >> unpaddedHour12 [ ^ GRMappedPrinter block: [ :time | (time hour - 1) \\ 12 + 1 ] next: GRNumberPrinter new ] { #category : #'parts-time' } GRPrinter class >> unpaddedHour24 [ ^ GRMappedPrinter block: [ :time | time hour ] next: GRNumberPrinter new ] { #category : #'parts-time' } GRPrinter class >> unpaddedMinute [ ^ GRMappedPrinter block: [ :time | time minute ] next: GRNumberPrinter new ] { #category : #'parts-date' } GRPrinter class >> unpaddedMonth [ ^ GRMappedPrinter block: [ :date | date monthIndex ] next: GRNumberPrinter new ] { #category : #'parts-time' } GRPrinter class >> unpaddedSecond [ ^ GRMappedPrinter block: [ :time | time second ] next: GRNumberPrinter new ] { #category : #'parts-date' } GRPrinter class >> unpaddedYear [ ^ GRMappedPrinter block: [ :date | date year ] next: GRNumberPrinter new ] { #category : #'factory-currency' } GRPrinter class >> usCurrency [ ^ GRSignPrinter new , $$ , (GRNumberPrinter new separator: $,; precision: 2; yourself) ] { #category : #'parts-date' } GRPrinter class >> weekName: anArray [ ^ GRPluggablePrinter on: [ :date | anArray at: date dayOfWeek ] ] { #category : #operators } GRPrinter >> , aPrinter [ ^ GRSequentialPrinter new , self , aPrinter ] { #category : #utilities } GRPrinter >> pad: aString center: aCharacter to: anInteger [ "Pad to the center of aString with aCharacter to at least anInteger characters." | result index | anInteger <= aString size ifTrue: [ ^ aString ]. index := (anInteger - aString size) // 2. result := (String new: anInteger) atAllPut: aCharacter. result replaceFrom: index + 1 to: index + aString size with: aString startingAt: 1. ^ result ] { #category : #utilities } GRPrinter >> pad: aString left: aCharacter to: anInteger [ "Pad to the left side of aString with aCharacter to at least anInteger characters." | result | anInteger <= aString size ifTrue: [ ^ aString ]. result := (String new: anInteger) atAllPut: aCharacter. result replaceFrom: anInteger - aString size + 1 to: anInteger with: aString startingAt: 1. ^ result ] { #category : #utilities } GRPrinter >> pad: aString right: aCharacter to: anInteger [ "Pad to the right side of aString with aCharacter to at least anInteger characters." | result | anInteger <= aString size ifTrue: [ ^ aString ]. result := (String new: anInteger) atAllPut: aCharacter. result replaceFrom: 1 to: aString size with: aString startingAt: 1. ^ result ] { #category : #printing } GRPrinter >> print: anObject [ ^ String streamContents: [ :stream | self print: anObject on: stream ] ] { #category : #printing } GRPrinter >> print: anObject on: aStream [ "Subclasses override this method to produce some output." ]
X Tutup