Skip to content

Commit

Permalink
added title page generation in pdf
Browse files Browse the repository at this point in the history
  • Loading branch information
venkatgoud committed Jun 16, 2020
1 parent f551e24 commit ba95184
Showing 1 changed file with 91 additions and 19 deletions.
110 changes: 91 additions & 19 deletions src/components/preview.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,50 94,122 @@ const standardStyles = StyleSheet.create({
}
});

const titleStyles = StyleSheet.create({
page: {
flexDirection: 'col',
justifyContent: 'space-around',
alignItems: 'center',
height: '100%',
fontSize: 12,
fontFamily: "Courier"
},
title: {
alignSelf: "center",
fontSize: 18,
fontFamily: "Courier-Bold",
textDecoration: "underline",
marginTop: DPI * 2
},
center_view: {
justifyContent: 'space-between'
},
left_view: {
alignSelf: 'flex-start',
paddingLeft: 40
},
title_center_item: {
padding: 4,
alignSelf: "center"
},
title_left_item: {
paddingLeft: DPI,
paddingBottom: 2,
alignSelf: "left"
}
});

const MyDocument = (props) => (
<Document>
<Page size="LETTER" style={props.styles.page}>
<Text style={props.styles.pageNumbers} render={({ pageNumber, totalPages }) => (
`${pageNumber} / ${totalPages}`
)} fixed />
<View>
{generate(props)}
</View>
</Page>
{generate(props)}
</Document>
)

let pdfContent = (tokens, styles) => (
tokens.map((token, index) => {
let pdfContent = (tokens, styles) => {

let authorDetails = [];
let contactDetails = [];
let scriptTitle;
let otherItems = [];

tokens.forEach((token, index) => {
switch (token.type) {
case 'title':
scriptTitle = <Text key={index} style={titleStyles.title}>{token.text}</Text>
break;
case 'credit':
case 'author':
case 'authors':
case 'source':
case 'notes':
authorDetails.push(<Text key={index} style={titleStyles.title_center_item}>{token.text}</Text>)
break;
case 'draft_date':
case 'date':
case 'contact':
case 'copyright':
contactDetails.push(<Text key={index} style={titleStyles.title_left_item}>{token.text}</Text>)
break;
case 'scene_heading':
case 'action':
case 'dialogue_end':
case 'transition':
return <View key={index}>
otherItems.push(<View key={index}>
<Text style={styles[token.type]}>{token.text}</Text>
<Text style={styles.heading}>{"\n"}</Text>
</View>
</View>)
break;
case 'character':
case 'dialogue':
case 'parenthetical':
return <Text key={index} style={styles[token.type]}>{token.text}</Text>
otherItems.push(<Text key={index} style={styles[token.type]}>{token.text}</Text>)
break;
default:
return <View key={index} />
otherItems.push(<View key={index} />)
break;
}

})
return < >
{titlePage(scriptTitle, authorDetails, contactDetails)}
<Page size="LETTER" style={styles.page}>
<Text style={styles.pageNumbers} render={({ pageNumber, totalPages }) => (
`${pageNumber} / ${totalPages}`
)} fixed />
<View>
{otherItems}
</View>
</Page>
</ >
}

let titlePage = (scriptTitle, authorDetails, leftscriptTitles) => (
scriptTitle ?
<Page size="LETTER" style={titleStyles.page} >
{scriptTitle}
<View style={titleStyles.center_view}>
{authorDetails}
</View>
<View style={titleStyles.left_view}>
{leftscriptTitles}
</View>
</Page>
: null
)

function generate(props) {

let tokens = parser.parse(props.content.toString(), true).tokens

return pdfContent(tokens, props.styles);

}


export default class Preview extends React.Component {
render() {
return <div className="pdf">
Expand Down

0 comments on commit ba95184

Please sign in to comment.