@@ -19,7 +19,7 @@ use crate::lang::{Case, SentenceCase, TitleCase};
19
19
use crate :: types:: { ChunkedString , Date , MaybeTyped , Numeric } ;
20
20
use crate :: PageRanges ;
21
21
22
- use super :: taxonomy:: EntryLike ;
22
+ use super :: taxonomy:: { EntryLike , NumberOrPageVariableResult } ;
23
23
use super :: { write_year, Context , ElemMeta , IbidState , SpecialForm , UsageInfo } ;
24
24
25
25
pub mod names;
@@ -278,11 +278,20 @@ impl RenderCsl for citationberg::Number {
278
278
return ;
279
279
}
280
280
281
- let value = ctx. resolve_number_variable ( self . variable ) ;
281
+ let value = ctx. resolve_number_or_page_variable ( self . variable ) ;
282
282
if ctx. instance . sorting {
283
- if let Some ( NumberVariableResult :: Regular ( MaybeTyped :: Typed ( n) ) ) = value {
284
- n. fmt_value ( ctx, true ) . unwrap ( ) ;
285
- return ;
283
+ match value {
284
+ Some ( NumberOrPageVariableResult :: Number (
285
+ NumberVariableResult :: Regular ( MaybeTyped :: Typed ( n) ) ,
286
+ ) ) => {
287
+ n. fmt_value ( ctx, true ) . unwrap ( ) ;
288
+ return ;
289
+ }
290
+ Some ( NumberOrPageVariableResult :: Page ( MaybeTyped :: Typed ( p) ) ) => {
291
+ write ! ( ctx, "{p}" ) . unwrap ( ) ;
292
+ return ;
293
+ }
294
+ _ => { }
286
295
}
287
296
}
288
297
@@ -292,18 +301,32 @@ impl RenderCsl for citationberg::Number {
292
301
let gender = ctx. gender ( self . variable . into ( ) ) ;
293
302
294
303
match value {
295
- Some ( NumberVariableResult :: Regular ( MaybeTyped :: Typed ( num ) ) )
296
- if num . will_transform ( ) =>
297
- {
304
+ Some ( NumberOrPageVariableResult :: Number ( NumberVariableResult :: Regular (
305
+ MaybeTyped :: Typed ( num ) ,
306
+ ) ) ) if num . will_transform ( ) => {
298
307
render_typed_num ( num. as_ref ( ) , self . form , gender, ctx) ;
299
308
}
300
- Some ( NumberVariableResult :: Regular ( MaybeTyped :: Typed ( num) ) ) => {
301
- write ! ( ctx, "{}" , num) . unwrap ( )
309
+
310
+ Some ( NumberOrPageVariableResult :: Number ( NumberVariableResult :: Regular (
311
+ MaybeTyped :: Typed ( num) ,
312
+ ) ) ) => write ! ( ctx, "{}" , num) . unwrap ( ) ,
313
+
314
+ Some ( NumberOrPageVariableResult :: Number ( NumberVariableResult :: Regular (
315
+ MaybeTyped :: String ( s) ,
316
+ ) ) ) => ctx. push_str ( & s) ,
317
+
318
+ Some ( NumberOrPageVariableResult :: Number (
319
+ NumberVariableResult :: Transparent ( n) ,
320
+ ) ) => ctx. push_transparent ( n) ,
321
+
322
+ Some ( NumberOrPageVariableResult :: Page ( MaybeTyped :: Typed ( p) ) ) => {
323
+ render_page_range ( & p, ctx)
302
324
}
303
- Some ( NumberVariableResult :: Regular ( MaybeTyped :: String ( s) ) ) => {
325
+
326
+ Some ( NumberOrPageVariableResult :: Page ( MaybeTyped :: String ( s) ) ) => {
304
327
ctx. push_str ( & s)
305
328
}
306
- Some ( NumberVariableResult :: Transparent ( n ) ) => ctx . push_transparent ( n ) ,
329
+
307
330
None => { }
308
331
}
309
332
@@ -312,25 +335,36 @@ impl RenderCsl for citationberg::Number {
312
335
ctx. commit_elem (
313
336
depth,
314
337
self . display ,
315
- ( self . variable == NumberVariable :: CitationNumber )
316
- . then_some ( ElemMeta :: CitationNumber )
317
- . or ( Some ( ElemMeta :: Number ) ) ,
338
+ Some (
339
+ if self . variable
340
+ == NumberOrPageVariable :: Number ( NumberVariable :: CitationNumber )
341
+ {
342
+ ElemMeta :: CitationNumber
343
+ } else {
344
+ ElemMeta :: Number
345
+ } ,
346
+ ) ,
318
347
) ;
319
348
}
320
349
321
350
fn will_render < T : EntryLike > ( & self , ctx : & mut Context < T > , var : Variable ) -> bool {
322
351
match ctx. instance . kind {
323
- Some ( SpecialForm :: VarOnly ( Variable :: Number ( n) ) ) if self . variable != n => {
352
+ Some ( SpecialForm :: VarOnly ( Variable :: Number ( n) ) )
353
+ if self . variable != NumberOrPageVariable :: Number ( n) =>
354
+ {
324
355
return false
325
356
}
326
357
Some ( SpecialForm :: OnlyFirstDate | SpecialForm :: OnlyYearSuffix ) => {
327
- return self . variable == NumberVariable :: Locator
358
+ return matches ! (
359
+ self . variable,
360
+ NumberOrPageVariable :: Number ( NumberVariable :: Locator )
361
+ )
328
362
}
329
363
Some ( SpecialForm :: VarOnly ( _) ) => return false ,
330
364
_ => { }
331
365
}
332
366
333
- var == Variable :: Number ( self . variable )
367
+ var == Variable :: from ( self . variable )
334
368
}
335
369
336
370
fn will_have_info < T : EntryLike > ( & self , ctx : & mut Context < T > ) -> ( bool , UsageInfo ) {
@@ -339,7 +373,7 @@ impl RenderCsl for citationberg::Number {
339
373
// silent lookup, otherwise we need to perform a regular lookup.
340
374
let suppressing = ctx. writing . suppress_queried_variables ;
341
375
ctx. writing . stop_suppressing_queried_variables ( ) ;
342
- let lookup_result = ctx. resolve_number_variable ( self . variable ) ;
376
+ let lookup_result = ctx. resolve_number_or_page_variable ( self . variable ) ;
343
377
344
378
if suppressing {
345
379
ctx. writing . start_suppressing_queried_variables ( ) ;
0 commit comments